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

Reply via email to