是否可以将多个pdf / a(可能具有不同的一致性级别:一些pdf / a-1b,一些pdf / a-3b ecc)连接成一个pdfa?
我当时认为可以使用最新级别(3-a或3b),但是在通过VeraPDF进行验证时出现错误:
这是我的代码(其中:
public static byte[] CreateConformantCopy(List<byte[]> sourcePdfs)
{
var version = PdfVersion.PDF_1_7;
var type = PdfAType.PDF_A_3B;
WriterProperties wp = new WriterProperties();
wp.UseSmartMode();
wp.SetPdfVersion(version.ToPdfVersion());
PdfOutputIntent oi = new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", Assembly.GetExecutingAssembly().GetManifestResourceStream("xxx.Resources.sRGB_CS_profile.icm"));
using (var mergedPdf = new MemoryStream())
{
var writer = new PdfWriter(mergedPdf, wp);
using (PdfADocument newDoc = new PdfADocument(writer, type.ToPdfAConformanceLevel(), oi, new DocumentProperties() { }))
{
Document document = new Document(newDoc, PageSize.A4.Rotate());
newDoc.SetTagged();
newDoc.GetCatalog().SetLang(new PdfString(Thread.CurrentThread.CurrentUICulture.Name));
newDoc.GetCatalog().SetViewerPreferences(
new PdfViewerPreferences()
.SetDisplayDocTitle(true)
.SetCenterWindow(true)
);
PdfMerger merger = new PdfMerger(newDoc);
for (int k = 0; k < sourcePdfs.Count; k++)
{
using (var inDoc = PdfHelper.GetDocument(sourcePdfs[k]))
{
var numberOfPages = inDoc.GetNumberOfPages();
merger.Merge(inDoc, 1, numberOfPages);
}
}
newDoc.Close();
}
return mergedPdf.ToArray();
}
}
答案 0 :(得分:0)
PDF / A-1和PDF / A-2在要求方面有一些差异。因此,将它们合并在一起是不可能的。查看您的验证错误,我认为情况确实如此。例如,第一个关于XMP元数据。 PDF / A-2在这里更加严格,您会遇到此错误,因为您的第一个文件(可能是有效的PDF / A-1)实际上并不满足PDF / A-2规则。
但是可以将PDF / A-1文档附加到PDF / A-2。这甚至不需要使用PDF / A-3,它允许任意附件。 PDF / A-2标准确实允许附加有效的PDF / A-1(以及PDF / A-2文档)。