If you are doing hidden text on the OCR (which it appears you are),
then you do NOT need to embed the font _IF_ you only use "Text Render
Mode 3" when you draw the text.
Leonard
On Dec 2, 2008, at 6:41 PM, Benjamin Podszun wrote:
> Hi there.
>
> I'm using itextsharp to do exactly what someone else was trying to
> do a
> week ago (just joined, otherwise I'd have answered of course). My code
> works fine for "normal" PDF files, that is without trying to create
> PDF/A
> files. It fails as soon as I add the snippets to make it a PDF/A at
> content.SetFontAndSize(font, fontSize);
> with a PDFXConformanceException, "All fonts must be embedded".
> Yes, sure. Makes sense. But actually I already want to embed the
> font in
> the first place.
>
> I'm pasting a slightly longer snipped for the guys that want to do the
> same, marking the possible cause with a huge/caps comment. Again:
> The code
> works as long as I don't try to create a PDF/A compliant PDF (i.e. the
> parameter to my method is false).
> Thanks in advance for any help!
> Ben
>
> private static void ConvertToPDF(RandomAccessFileOrArray sourceFile,
> string
> destinationImageFile, bool searchable, bool pdfAcompliant) {
> // Create the PDF document
> Document document = new Document();
> PdfWriter pdfWriter = PdfWriter.GetInstance(document, new
> FileStream(destinationImageFile, FileMode.Create));
> pdfWriter.StrictImageSequence = true;
> pdfWriter.SetFullCompression();
> pdfWriter.SetLinearPageMode();
>
> if (pdfAcompliant) {
> pdfWriter.PDFXConformance = PdfWriter.PDFA1B;
> }
>
> // POSSIBLE CAUSE HERE:
> // This is the font I'm using. It's only used for invisible rendering
> anyway
> // The "embedded" parameter is true, but Visual Studio shows me that
> the
> resulting
> // BaseFont instance's "embedded" member is set to false when I debug
> this?
> BaseFont font = BaseFont.CreateFont(BaseFont.HELVETICA,
> BaseFont.WINANSI,
> pdfAcompliant);
>
> // I do this for multiple pages, leaving the loop out here
> Image pageImage = SomeConversionMethod();
>
> // Set the size of the next page to the image dimensions
> iTextSharp.text.Rectangle PageRectangle = new
> iTextSharp.text.Rectangle(pageImage.Width, pageImage.Height);
> document.SetPageSize(PageRectangle);
>
> // Compute the scaling factor for coordinate transformations
> double horizontalScaling = pageImage.ScaledWidth / pageImage.Width;
> double verticalScaling = pageImage.ScaledHeight / pageImage.Height;
>
> // Prepare/start the next page in the PDF document
> if (document.IsOpen()) {
> document.NewPage();
> } else {
> document.Open();
>
> if (pdfAcompliant) {
> // Copied verbatim from the itext mailing list, see:
> // http://article.gmane.org/gmane.comp.java.lib.itext.general/31582/
>
> PdfDictionary outputIntent = new
> PdfDictionary(PdfName.OUTPUTINTENT);
> outputIntent.Put(PdfName.OUTPUTCONDITIONIDENTIFIER, new
> PdfString("sRGB IEC61966-2.1"));
> outputIntent.Put(PdfName.INFO, new PdfString("sRGB
> IEC61966-2.1"));
> outputIntent.Put(PdfName.S, PdfName.GTS_PDFA1);
> PdfICCBased ib = new
> PdfICCBased
> (ICC_Profile.GetInstance(Properties.Resources.ICC_Profile));
> ib.Remove(PdfName.ALTERNATE);
> outputIntent.Put(PdfName.DESTOUTPUTPROFILE,
> pdfWriter.AddToBody(ib).IndirectReference);
> pdfWriter.ExtraCatalog.Put(PdfName.OUTPUTINTENTS, new
> PdfArray(outputIntent));
> }
> }
>
> if (searchable) {
> // Grab the OCR Data
> SomePageStructure ocrPage = GetPageFromSomewhere();
> if (ocrPage != null) {
> // Read all words in all lines
> foreach (Line ocrLine in ocrPage.Lines) {
> foreach (Word ocrWord in ocrLine.Words) {
> // Calculate the font size for the OCR rectangle bounds
> float fontSize = CalculateFontSize(font,
> ocrWord.Rectangle.Width
> * horizontalScaling, ocrWord.Data);
>
> // Special case: Some characters are non-printable: Continue
> with
> the next word
> if (fontSize < 0.1f) continue;
>
> // Write the text to the PDF, on the layer below the default
> content, invisble
> PdfContentByte content = pdfWriter.DirectContentUnder;
> content.BeginText();
> // EXCEPTION BELOW
> content.SetFontAndSize(font, fontSize); // EXCEPTION HERE,
> font
> seems not to be embedded
> // EXCEPTION ABOVE
>
> content
> .SetTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_INVISIBLE);
> content.SetTextMatrix(
> (float)(ocrWord.Rectangle.Location.X * horizontalScaling),
> pageImage.ScaledHeight - (float)(ocrWord.Rectangle.Bottom *
> verticalScaling)
> );
> content.ShowText(ocrWord.Data);
> content.EndText();
> }
> }
> }
> }
>
> // Draw/add the image to the PDF page
> pageImage.SetAbsolutePosition(0, 0);
> document.Add(pageImage);
>
> if (pdfAcompliant) pdfWriter.CreateXmpMetadata();
> document.Close();
> }
>
> Can anyone help out?
>
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's
> challenge
> Build the coolest Linux based applications with Moblin SDK & win
> great prizes
> Grand prize is a trip for two to an Open Source event anywhere in
> the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> iText-questions mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/itext-questions
>
> Buy the iText book: http://www.1t3xt.com/docs/book.php
>
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions
Buy the iText book: http://www.1t3xt.com/docs/book.php