Skip to content

Commit 53ce56a

Browse files
committed
create pdf view from xrechnung.xml
1 parent 104c14f commit 53ce56a

File tree

5 files changed

+79
-31
lines changed

5 files changed

+79
-31
lines changed

Distribution/installtools.ps1

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,26 +30,26 @@ If (Test-Path apache-fop){
3030
Remove-Item apache-fop -Recurse
3131
}
3232

33-
Invoke-WebRequest -Uri https://github.com/itplr-kosit/validator/releases/download/v1.5.0/validator-1.5.0-distribution.zip -OutFile validator.zip
34-
Invoke-WebRequest -Uri https://github.com/itplr-kosit/validator-configuration-xrechnung/releases/download/release-2023-05-12/validator-configuration-xrechnung_2.3.1_2023-05-12.zip -OutFile validator-configuration23x.zip
35-
Invoke-WebRequest -Uri https://github.com/itplr-kosit/validator-configuration-xrechnung/releases/download/release-2023-11-15/validator-configuration-xrechnung_3.0.1_2023-11-15.zip -OutFile validator-configuration30x.zip
36-
Invoke-WebRequest -Uri https://github.com/itplr-kosit/xrechnung-visualization/releases/download/v2023-05-12/xrechnung-2.3.1-xrechnung-visualization-2023-05-12.zip -OutFile visualization23x.zip
37-
Invoke-WebRequest -Uri https://github.com/itplr-kosit/xrechnung-visualization/releases/download/v2023-11-15/xrechnung-3.0.1-xrechnung-visualization-2023-11-15.zip -OutFile visualization30x.zip
38-
Invoke-WebRequest -Uri https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.6%2B10/OpenJDK17U-jre_x64_windows_hotspot_17.0.6_10.zip -OutFile jre.zip
33+
Invoke-WebRequest -Uri "https://github.com/itplr-kosit/validator/releases/download/v1.5.0/validator-1.5.0-distribution.zip" -OutFile validator.zip
34+
Invoke-WebRequest -Uri "https://github.com/itplr-kosit/validator-configuration-xrechnung/releases/download/release-2023-05-12/validator-configuration-xrechnung_2.3.1_2023-05-12.zip" -OutFile validator-configuration23x.zip
35+
Invoke-WebRequest -Uri "https://github.com/itplr-kosit/validator-configuration-xrechnung/releases/download/release-2023-11-15/validator-configuration-xrechnung_3.0.1_2023-11-15.zip" -OutFile validator-configuration30x.zip
36+
Invoke-WebRequest -Uri "https://github.com/itplr-kosit/xrechnung-visualization/releases/download/v2023-05-12/xrechnung-2.3.1-xrechnung-visualization-2023-05-12.zip" -OutFile visualization23x.zip
37+
Invoke-WebRequest -Uri "https://github.com/itplr-kosit/xrechnung-visualization/releases/download/v2023-11-15/xrechnung-3.0.1-xrechnung-visualization-2023-11-15.zip" -OutFile visualization30x.zip
38+
Invoke-WebRequest -Uri "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.6%2B10/OpenJDK17U-jre_x64_windows_hotspot_17.0.6_10.zip" -OutFile jre.zip
3939
#Invoke-WebRequest -Uri https://github.com/itplr-kosit/xrechnung-schematron/releases/tag/release-2.0.2 -OutFile schematron.zip
40-
#Invoke-WebRequest -Uri "https://www.apache.org/dyn/closer.cgi?filename=/xmlgraphics/fop/binaries/fop-2.8-bin.zip&action=download" -OutFile fop.zip
40+
Invoke-WebRequest -Uri "https://www.apache.org/dyn/closer.cgi?filename=/xmlgraphics/fop/binaries/fop-2.8-bin.zip&action=download" -OutFile fop.zip
4141

4242
Expand-Archive validator.zip
4343
Expand-Archive validator-configuration23x.zip
4444
Expand-Archive validator-configuration30x.zip
4545
Expand-Archive visualization23x.zip
4646
Expand-Archive visualization30x.zip
4747
Expand-Archive jre.zip
48-
#Expand-Archive fop.zip
48+
Expand-Archive fop.zip
4949
Move-Item .\jre\jdk-17.0.6+10-jre .\java
5050
Remove-Item jre -Recurse
51-
#Move-Item .\fop\fop-2.8 .\apache-fop
52-
#Remove-Item fop -Recurse
51+
Move-Item .\fop\fop-2.8 .\apache-fop
52+
Remove-Item fop -Recurse
5353

5454
If (Test-Path validator.zip){
5555
Remove-Item validator.zip

Samples/XRechnungProject.dpr

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
2-
Copyright (C) 2023 Landrix Software GmbH & Co. KG
2+
Copyright (C) 2024 Landrix Software GmbH & Co. KG
33
Sven Harazim, [email protected]
4-
Version 2.3.1
4+
Version 3.0.1
55
66
License
77
This file is not official part of the package XRechnung-for-Delphi.

Samples/XRechnungUnit1.dfm

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,6 @@ object Form1: TForm1
193193
Width = 130
194194
Height = 25
195195
Caption = 'XRechnung als PDF'
196-
Enabled = False
197196
TabOrder = 16
198197
OnClick = Button6Click
199198
end

Samples/XRechnungUnit1.pas

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
Copyright (C) 2023 Landrix Software GmbH & Co. KG
2+
Copyright (C) 2024 Landrix Software GmbH & Co. KG
33
Sven Harazim, [email protected]
44
Version 3.0.1
55
@@ -64,13 +64,15 @@ TForm1 = class(TForm)
6464
private
6565
WebBrowserContent : TStringList;
6666
WebBrowserContentFilename : String;
67+
WebBrowserContentFilenamePdf : String;
6768
procedure Generate(inv : TInvoice);
6869
public
6970
DistributionBasePath : String;
7071
JavaRuntimeEnvironmentPath : String;
7172
ValidatorLibPath : String;
7273
ValidatorConfigurationPath : String;
7374
VisualizationLibPath : String;
75+
FopLibPath : String;
7476
end;
7577

7678
var
@@ -90,6 +92,7 @@ procedure TForm1.FormCreate(Sender: TObject);
9092
ValidatorLibPath := DistributionBasePath +'validator'+PathDelim;
9193
ValidatorConfigurationPath := DistributionBasePath +'validator-configuration'+ifthen(rbVersion.ItemIndex = 0,'23x','30x')+PathDelim;
9294
VisualizationLibPath := DistributionBasePath +'visualization'+ifthen(rbVersion.ItemIndex = 0,'23x','30x')+PathDelim;
95+
FopLibPath := DistributionBasePath + 'apache-fop'+PathDelim;
9396

9497
Width := 50;
9598
Top := 50;
@@ -98,6 +101,7 @@ procedure TForm1.FormCreate(Sender: TObject);
98101

99102
WebBrowserContent := TStringList.Create;
100103
WebBrowserContentFilename := ExtractFilePath(Application.ExeName)+'content.html';
104+
WebBrowserContentFilenamePdf := ExtractFilePath(Application.ExeName)+'content.pdf';
101105
end;
102106

103107
procedure TForm1.FormDestroy(Sender: TObject);
@@ -774,8 +778,6 @@ procedure TForm1.Button6Click(Sender: TObject);
774778
cmdoutput : String;
775779
pdfresult : TMemoryStream;
776780
begin
777-
//Experimental - it does not work
778-
779781
btX2ConvertHTML.Visible := false;
780782
WebBrowser2.Navigate2('about:blank');
781783

@@ -787,19 +789,23 @@ procedure TForm1.Button6Click(Sender: TObject);
787789
GetXRechnungValidationHelperJava.SetJavaRuntimeEnvironmentPath(JavaRuntimeEnvironmentPath)
788790
.SetValidatorLibPath(ValidatorLibPath)
789791
.SetVisualizationLibPath(VisualizationLibPath)
792+
.SetFopLibPath(FopLibPath)
790793
.VisualizeFileAsPdf(od.FileName, (TXRechnungValidationHelper.GetXRechnungVersion(od.FileName) in [XRechnungVersion_230_UBL,XRechnungVersion_30x_UBL]),cmdoutput,pdfresult);
791794

792795
Memo3.Lines.Text := cmdoutput;
793796

794-
// Doc := WebBrowser2.Document;
795-
// Doc.Clear;
796-
// if pdfresult <> nil then
797-
// begin
798-
// //pdfresult.SaveToFile();
799-
// pdfresult.Free;
800-
// end else
801-
// Doc.Write('<html><body>Visualisierung nicht erfolgreich. Siehe Verzeichnis ./Distribution/Read.Me</body></html>');
802-
// Doc.Close;
797+
if pdfresult <> nil then
798+
begin
799+
pdfresult.SaveToFile(WebBrowserContentFilenamePdf);
800+
pdfresult.Free;
801+
WebBrowser2.Navigate2('file:///'+WebBrowserContentFilenamePdf);
802+
end else
803+
begin
804+
WebBrowserContent.Text := '<html><body>Visualisierung nicht erfolgreich. Siehe Verzeichnis ./Distribution/Read.Me</body></html>';
805+
WebBrowserContent.SaveToFile(WebBrowserContentFilename,TEncoding.UTF8);
806+
WebBrowser2.Navigate2('file:///'+WebBrowserContentFilename);
807+
end;
808+
803809
finally
804810
od.Free;
805811
end;

intf.XRechnungValidationHelperJava.pas

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ interface
2727
function SetValidatorLibPath(const _Path : String) : IXRechnungValidationHelperJava;
2828
function SetValidatorConfigurationPath(const _Path : String) : IXRechnungValidationHelperJava;
2929
function SetVisualizationLibPath(const _Path : String) : IXRechnungValidationHelperJava;
30+
function SetFopLibPath(const _Path : String) : IXRechnungValidationHelperJava;
3031
function Validate(const _InvoiceXMLData : String; out _CmdOutput,_ValidationResultAsXML,_ValidationResultAsHTML : String) : Boolean;
3132
function ValidateFile(const _InvoiceXMLFilename : String; out _CmdOutput,_ValidationResultAsXML,_ValidationResultAsHTML : String) : Boolean;
3233
function Visualize(const _InvoiceXMLData : String; _TrueIfUBL_FalseIfCII : Boolean; out _CmdOutput,_VisualizationAsHTML : String) : Boolean;
@@ -45,6 +46,7 @@ TXRechnungValidationHelperJava = class(TInterfacedObject,IXRechnungValidationH
4546
ValidatorLibPath : String;
4647
ValidatorConfigurationPath : String;
4748
VisualizationLibPath : String;
49+
FopLibPath : String;
4850
CmdOutput : TStringList;
4951
function ExecAndWait(_Filename, _Params: string): Boolean;
5052
function QuoteIfContainsSpace(const _Value : String) : String;
@@ -55,6 +57,7 @@ TXRechnungValidationHelperJava = class(TInterfacedObject,IXRechnungValidationH
5557
function SetValidatorLibPath(const _Path : String) : IXRechnungValidationHelperJava;
5658
function SetValidatorConfigurationPath(const _Path : String) : IXRechnungValidationHelperJava;
5759
function SetVisualizationLibPath(const _Path : String) : IXRechnungValidationHelperJava;
60+
function SetFopLibPath(const _Path : String) : IXRechnungValidationHelperJava;
5861
function Validate(const _InvoiceXMLData : String; out _CmdOutput,_ValidationResultAsXML,_ValidationResultAsHTML : String) : Boolean;
5962
function ValidateFile(const _InvoiceXMLFilename : String; out _CmdOutput,_ValidationResultAsXML,_ValidationResultAsHTML : String) : Boolean;
6063
function Visualize(const _InvoiceXMLData : String; _TrueIfUBL_FalseIfCII : Boolean; out _CmdOutput,_VisualizationAsHTML : String) : Boolean;
@@ -140,6 +143,13 @@ function TXRechnungValidationHelperJava.ExecAndWait(_Filename, _Params: string):
140143
end;
141144
end;
142145

146+
function TXRechnungValidationHelperJava.SetFopLibPath(
147+
const _Path: String): IXRechnungValidationHelperJava;
148+
begin
149+
FopLibPath := IncludeTrailingPathDelimiter(_Path);
150+
Result := self;
151+
end;
152+
143153
function TXRechnungValidationHelperJava.SetJavaRuntimeEnvironmentPath(
144154
const _Path: String): IXRechnungValidationHelperJava;
145155
begin
@@ -454,9 +464,10 @@ function TXRechnungValidationHelperJava.VisualizeFileAsPdf(
454464
if not _TrueIfUBL_FalseIfCII then
455465
if not FileExists(VisualizationLibPath+'xsl\cii-xr.xsl') then
456466
exit;
457-
458467
if not FileExists(VisualizationLibPath+'xsl\xrechnung-html.xsl') then
459468
exit;
469+
if not FileExists(FopLibPath+'fop\build\fop.jar') then
470+
exit;
460471

461472
hstrl := TStringList.Create;
462473
cmd := TStringList.Create;
@@ -478,26 +489,58 @@ function TXRechnungValidationHelperJava.VisualizeFileAsPdf(
478489
QuoteIfContainsSpace(ValidatorLibPath+'libs\Saxon-HE-11.4.jar;'+ValidatorLibPath+'libs\xmlresolver-4.4.3.jar')+
479490
' net.sf.saxon.Transform'+' -s:'+QuoteIfContainsSpace(ChangeFileExt(_InvoiceXMLFilename,'-xr.xml'))+
480491
' -xsl:'+QuoteIfContainsSpace(VisualizationLibPath+'xsl\xr-pdf.xsl')+
481-
' -o:'+QuoteIfContainsSpace(ChangeFileExt(_InvoiceXMLFilename,'-.pdf')));
492+
' -o:'+QuoteIfContainsSpace(ChangeFileExt(_InvoiceXMLFilename,'-.fo'))); // geändert von pdf auf fo
482493

483-
cmd.SaveToFile(_InvoiceXMLFilename+'.bat',TEncoding.ANSI);
494+
cmd.SaveToFile(_InvoiceXMLFilename+'.bat',TEncoding.ANSI); //ToDo
495+
//cmd.SaveToFile(_InvoiceXMLFilename+'.bat');
484496

485497
Result := ExecAndWait(_InvoiceXMLFilename+'.bat','');
486498

487499
_CmdOutput := CmdOutput.Text;
488500

489501
DeleteFile(_InvoiceXMLFilename+'.bat');
490-
//DeleteFile(ChangeFileExt(_InvoiceXMLFilename,'-xr.xml'));
491502

503+
if not Result then
504+
exit;
505+
506+
////////////////////////////////////////////////////////////////////////////
507+
// Fopper aufrufen. Datei ist eine fo Datei. Saxon HE gibt eine fo-Datei zurück!
508+
// cmd Inhalt aus der apache-fop\foop\fop.bat ausgelesen mit echo "%JAVACMD%" %JAVAOPTS% %LOGCHOICE% %LOGLEVEL% -cp "%LOCALCLASSPATH%" %FOP_OPTS% org.apache.fop.cli.Main %FOP_CMD_LINE_ARGS%
509+
if FileExists(ChangeFileExt(_InvoiceXMLFilename,'-.fo')) then
510+
begin
511+
cmd.Clear;
512+
cmd.Add('pushd '+QuoteIfContainsSpace(ExtractFilePath(_InvoiceXMLFilename)));
513+
cmd.Add(QuoteIfContainsSpace(JavaRuntimeEnvironmentPath+'bin\java.exe')+' -cp '+
514+
QuoteIfContainsSpace(FopLibPath+'fop\build\fop.jar;'+FopLibPath+'fop\lib\batik-all-1.16.jar;' +
515+
FopLibPath+'fop\lib\commons-io-2.11.0.jar;'+FopLibPath+'fop\lib\commons-logging-1.0.4.jar;' +
516+
FopLibPath+'fop\lib\fontbox-2.0.24.jar;'+FopLibPath+'fop\lib\serializer-2.7.2.jar;' +
517+
FopLibPath+'fop\lib\xml-apis-1.4.01.jar;'+FopLibPath+'fop\lib\xml-apis-ext-1.3.04.jar;' +
518+
FopLibPath+'fop\lib\xmlgraphics-commons-2.8.jar;') +
519+
' org.apache.fop.cli.Main ' +
520+
QuoteIfContainsSpace(ChangeFileExt(_InvoiceXMLFilename,'-.fo')) + ' ' +
521+
QuoteIfContainsSpace(ChangeFileExt(_InvoiceXMLFilename,'-.pdf') ));
522+
523+
cmd.SaveToFile(_InvoiceXMLFilename+'.bat');
524+
525+
Result := ExecAndWait(_InvoiceXMLFilename+'.bat','');
526+
527+
_CmdOutput := _CmdOutput + #13#10 + CmdOutput.Text;
528+
529+
DeleteFile(_InvoiceXMLFilename+'.bat');
530+
DeleteFile(ChangeFileExt(_InvoiceXMLFilename,'-.fo'));
531+
end else
532+
Result := false;
533+
534+
DeleteFile(ChangeFileExt(_InvoiceXMLFilename,'-xr.xml'));
535+
////////////////////////////////////////////////////////////////////////////
492536
if FileExists(ChangeFileExt(_InvoiceXMLFilename,'-.pdf')) then
493537
begin
494538
_VisualizationAsPdf := TMemoryStream.Create;
495539
_VisualizationAsPdf.LoadFromFile(ChangeFileExt(_InvoiceXMLFilename,'-.pdf'));
496540
_VisualizationAsPdf.Position := 0;
497-
//DeleteFile(ChangeFileExt(_InvoiceXMLFilename,'-.pdf'));
541+
DeleteFile(ChangeFileExt(_InvoiceXMLFilename,'-.pdf'));
498542
end else
499543
Result := false;
500-
501544
finally
502545
hstrl.Free;
503546
cmd.Free;

0 commit comments

Comments
 (0)