Tôi đang sử dụng iTextSharp để tạo tài liệu pdf từ hình ảnh. Cho đến nay tôi đã không thành công.
Chỉnh sửa: Tôi đang sử dụng iTextSharp để tạo ra PDFTạo pdf phù hợp PDF/A chỉ với hình ảnh bằng cách sử dụng iTextSharp
Tất cả tôi cố gắng là để thực hiện một pdf-một tài liệu (1a hoặc 1b, bất cứ điều gì phù hợp), với một số hình ảnh. Đây là mã tôi đã đưa ra cho đến nay, nhưng tôi tiếp tục nhận được lỗi khi tôi cố gắng xác nhận chúng với pdf-tools hoặc validatepdfa.
Đây là lỗi tôi nhận được từ các công cụ pdf (sử dụng xác thực PDF/A-1b): Chỉnh sửa: MarkInfo và không gian màu chưa hoạt động. Phần còn lại là ổn
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.
dòng chảy chính
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();
Đây là prepareImage()
Nó được sử dụng để làm phẳng các hình ảnh sang bmp, vì vậy tôi không cần phải bận tâm về kênh 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;
}
Bất kỳ ai cũng có thể giúp tôi sửa chữa lỗi không? Cụ thể device-specific color spaces
Edit: Nhiều giải thích: Những gì tôi đang cố gắng để đạt được là, chuyển đổi hình ảnh quét sang PDF/A để lưu trữ dữ liệu lâu dài-
Edit: thêm vào một số tác phẩm tôi sử dụng để thử nghiệm với
PDF và Pictures.rar (3.9 MB)
https://mega.co.nz/#!n8pClYgL!NJOJqSO3EuVrqLVyh3c43yW-u_U35NqeB0svc6giaSQ
Nó có thể là giá trị nâng cao một lỗi với những người iText. – Rup
Tại sao bạn đặt mức độ phù hợp thành PDF/A-1a và sau đó kiểm tra với 1b? Nó sẽ là tốt để được nhất quán. Ngoài ra, tại sao bạn mở tài liệu hai lần? Ngoài ra, tôi sẽ cố gắng giải quyết các lỗi khác trước tiên - các lỗi bạn có với cấu trúc tệp bị hỏng và vân vân, có thể dễ dàng can thiệp vào vấn đề (nhỏ hơn) mà bạn có với không gian màu ... –
@David Được rồi, cảm ơn vì Đáp lại. Mặc dù tôi đã có gần như tất cả mọi thứ một cách chính xác làm việc ngay bây giờ. Chỉ có 'không gian màu' là không chính xác. Tôi đã thêm một số chỉnh sửa vào mã. – Highmastdon