ZUGFeRD ファイルを生成するために iTextSharp をテストしています。私の最初のステップは、既存の PDF/A-3 ファイルから ZUGFeRD コンフォーム ファイルを生成することでした。これは、PDFACopy を使用して必要な PDFFileSpecification を作成することで成功しました。
次のステップは、既存の PDF または PDF/A-1 ファイルから PDF/A-3 ファイルを生成することです。これは難しい部分です。
まず、PDFACopy を通常の PDF (PDF/A ではない) と組み合わせて使用しようとすると、PDFACopy は PDF/A 準拠のファイルでのみ使用できるというエラーが表示されます。私の最初の質問は、iTextSharp を使用して PDF から PDF/A-3 準拠のファイルを取得する方法です。
ギャップを減らすために、Ghostscript を使用して PDF を PDF/A-1 ファイルに変換することにしました (cf. Ghostscript を使用して PDF を PDF/A または PDF/X に変換する方法は? )。これは成功したので、もう一度やり直しました。次に、「PDF/A バージョンが異なります」というエラーが表示されます。投げられました。既存の PDF/A-1 から新しい PDF/A-3 にコピーできないようです。既存の PDF(/A-1) からこの PDF/A-3 を作成するにはどうすればよいですか? それは可能ですか?
これが私のコードです:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(XML);
byte[] xmlBytes = Encoding.Default.GetBytes(xmlDoc.OuterXml);
Document doc = new Document();
PdfReader src_reader = new PdfReader(pdfPath);
FileStream fs = new FileStream(DEST, FileMode.Create, FileAccess.ReadWrite);
PdfACopy aCopy = new PdfACopy(doc, fs, PdfAConformanceLevel.ZUGFeRD);
doc.AddLanguage("de-DE");
doc.AddTitle("title");
doc.SetPageSize(src_reader.GetPageSizeWithRotation(1));
aCopy.SetTagged();
aCopy.UserProperties = true;
aCopy.PdfVersion = PdfCopy.VERSION_1_7;
aCopy.ViewerPreferences = PdfCopy.DisplayDocTitle;
aCopy.CreateXmpMetadata();
aCopy.XmpWriter.SetProperty(PdfAXmpWriter.zugferdSchemaNS, PdfAXmpWriter.zugferdDocumentFileName, "ZUGFeRD-invoice.xml");
//Ab hier können keine Metadaten mehr geschrieben werden
doc.Open();
ICC_Profile icc = ICC_Profile.GetInstance(new FileStream(ICM, FileMode.Open));
aCopy.SetOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc);
[...add the dictionary to doc..]
aCopy.AddDocument(src_reader);
doc.Close();
もう 1 つの質問: addDocument は機能しますが、copy.addPage(copy.getImportedPage(src_reader, i)) を使用すると、「ドキュメントにページがありません」というエラーがスローされます。なぜ?