Machen Sie eine pdf-konforme PDF/A mit nur Bilder mit iTextSharp

Verwende ich iTextSharp generieren Sie pdf-Dokumente aus Bildern. Ich habe bisher nicht erfolgreich gewesen.

Edit: ich bin mit iTextSharp zum generieren der PDF -

Alle ich versuche zu machen, ist ein pdf-Dokument (1a oder 1b, was auch immer passt), mit einigen Bildern. Dies ist der code, den ich habe, so weit, aber ich erhalte Fehler, wenn ich versuche, Sie zu bestätigen mit pdf-tools oder validatepdfa.

Dies sind die Fehler, die ich bekommen aus pdf-tools (mit PDF/A-1b-Validierung):
Edit: MarkInfo-und Farbraum arn noch nicht arbeiten. Der rest ist okay

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.

Main flow

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();

Dies ist prepareImage()

Es ist verwendet, um reduzieren Sie das Bild im bmp -, so brauche ich mich nicht zu belästigen, über alpha-Kanäle.

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;
}

Kann mir jemand helfen, in eine Richtung, um den Fehler zu beheben?
Speziell die device-specific color spaces

Edit: Weitere Erläuterung: Was ich versuche zu erreichen ist, zum konvertieren gescannter Bilder in PDF/A für Langzeitarchivierung

Edit: Hinzugefügt einige Dateien, die ich zum test mit

PDF-Dateien und Pictures.rar (3.9 MB)

https://mega.co.nz/#!n8pClYgL!NJOJqSO3EuVrqLVyh3c43yW-u_U35NqeB0svc6giaSQ

  • Es könnte sich lohnen, heben einen Fehler mit der iText Menschen.
  • Warum setzen Sie sich conformance level PDF/A-1a und überprüfen Sie dann gegen die 1b? Es wäre gut, konsequent zu sein. Auch, warum öffnen Sie das Dokument zweimal? Außerdem würde ich versuchen, zu beheben der anderen Fehler zuerst den Fehler haben Sie mit Datei-Struktur beschädigt werden, und so weiter, könnte leicht stören das (kleinere) problem, das man mit Farbe Räume...
  • Okay, vielen Dank für Ihre Antwort. Aber ich habe schon fast alles richtig jetzt arbeiten. Nur die color space ist nicht korrekt. Ich habe einige änderungen an dem code.
  • Was ist der Farbraum des Bildes, das Sie einfügen? Und kannst du uns ein Beispiel-PDF? So konnte ich führen Sie es durch die pdfToolbox-PDF/A-Prüfung, und vielleicht noch eine aussagekräftigere Fehlermeldung.
  • Was wir versuchen zu tun ist, konvertieren Sie gescannte Bilder in PDF/A für Langzeitarchivierung. Ich habe hochgeladen ein zip mit den Dateien, die ich für Tests: PDF-Dateien und Pictures.rar (3.9 MB) mega.co.nz/...
  • Haben Sie versucht, mit dem PdfAWriter? Seit dem letzten Sommer die PDF/A-spezifischen Funktionen wurden verschoben in getrennten Klassen. In Java Sie haben sogar schon in einem separaten Gefäß, vielleicht ist es das gleiche mit iTextSharp?

InformationsquelleAutor Highmastdon | 2013-04-09
Schreibe einen Kommentar