我使用iTextSharp從圖像生成pdf文檔。到目前爲止,我還沒有成功。
編輯:我使用iTextSharp的生成PDF使用iTextSharp製作PDF格式的符合PDF/A的圖像
所有我嘗試是使的PDF文檔(1a或1b,無論套),具有一定的圖像。這是我到目前爲止的代碼,但當我嘗試使用pdf-tools或validatepdfa來驗證它們時,我總是收到錯誤。
這是我從pdf-工具(使用PDF/A-1b驗證)得到的錯誤: 編輯:MarkInfo和色彩空間還沒有工作。剩下的就是好的
Validating file "0.pdf" for conformance level pdfa-1a
The key MarkInfo is required but missing.
A device-specific color space (DeviceRGB) without an appropriate output intent is used.
The document does not conform to the requested standard.
The document contains device-specific color spaces.
The document doesn't provide appropriate logical structure information.
Done.
主流
var output = new MemoryStream();
using (var iccProfileStream = new FileStream("ToPdfConverter/ColorProfiles/sRGB_v4_ICC_preference_displayclass.icc", FileMode.Open))
{
var document = new Document(new Rectangle(PageSize.A4.Width, PageSize.A4.Height), 0f, 0f, 0f, 0f);
var pdfWriter = PdfWriter.GetInstance(document, output);
pdfWriter.PDFXConformance = PdfWriter.PDFA1A;
document.Open();
var pdfDictionary = new PdfDictionary(PdfName.OUTPUTINTENT);
pdfDictionary.Put(PdfName.OUTPUTCONDITION, new PdfString("sRGB IEC61966-2.1"));
pdfDictionary.Put(PdfName.INFO, new PdfString("sRGB IEC61966-2.1"));
pdfDictionary.Put(PdfName.S, PdfName.GTS_PDFA1);
var iccProfile = ICC_Profile.GetInstance(iccProfileStream);
var pdfIccBased = new PdfICCBased(iccProfile);
pdfIccBased.Remove(PdfName.ALTERNATE);
pdfDictionary.Put(PdfName.DESTOUTPUTPROFILE, pdfWriter.AddToBody(pdfIccBased).IndirectReference);
pdfWriter.ExtraCatalog.Put(PdfName.OUTPUTINTENT, new PdfArray(pdfDictionary));
var image = PrepareImage(imageBytes);
document.Open();
document.Add(image);
pdfWriter.CreateXmpMetadata();
pdfWriter.CloseStream = false;
document.Close();
}
return output.GetBuffer();
這是
它被用來壓平到bmp圖像的prepareImage(),所以我不需要操心alpha通道。
private Image PrepareImage(Stream stream)
{
Bitmap bmp = new Bitmap(System.Drawing.Image.FromStream(stream));
var file = new MemoryStream();
bmp.Save(file, ImageFormat.Bmp);
var image = Image.GetInstance(file.GetBuffer());
if (image.Height > PageSize.A4.Height || image.Width > PageSize.A4.Width)
{
image.ScaleToFit(PageSize.A4.Width, PageSize.A4.Height);
}
return image;
}
任何人都可以幫助我解決錯誤的方向嗎? 具體的device-specific color spaces
編輯:更多的解釋:我試圖實現是,將掃描的圖像以PDF/A用於長期數據存儲
編輯:增加了一些文件,我使用帶有
PDF和Pictures.rar(3.9 MB)
https://mega.co.nz/#!n8pClYgL!NJOJqSO3EuVrqLVyh3c43yW-u_U35NqeB0svc6giaSQ
這可能是值得提高與iText的人的錯誤。 – Rup 2013-04-09 08:49:29
爲什麼要將一致性級別設置爲PDF/A-1a,然後檢查1b?保持一致是件好事。另外,爲什麼要打開文檔兩次?此外,我會嘗試首先解決其他錯誤 - 你有文件結構損壞等錯誤,可以很容易地干擾(顏色空間)(小)問題... – 2013-04-09 08:57:34
@大衛好吧,謝謝你的回覆。儘管我已經幾乎所有的東西都正確工作了。只有'色彩空間'是不正確的。我在代碼中添加了一些編輯。 – Highmastdon 2013-04-09 09:51:29