Antecedentes:¿Cómo incrusto las fuentes en un PDF existente?
Tengo PDF's Estoy generando mediante programación. Necesito poder enviar el PDF directamente a una impresora desde el servidor (no a través de una aplicación intermedia). Por el momento, puedo hacer todo lo anterior (generar PDF, enviar a la impresora), pero debido a que las fuentes no están incrustadas en el PDF, la impresora está sustituyendo la fuente.
Por qué las fuentes no se incrustan cuando se generaron:
estoy creando utilizando SQL Reporting Services de PDF de 2008. No es un problema conocido con SQL Reporting Services en que no va a incrustar fuentes (a menos que una serie de requisitos se cumplen - http://technet.microsoft.com/en-us/library/ms159713%28SQL.100%29.aspx). No me preguntes por qué, el PDF cumple con todos los requisitos enumerados de MS y las fuentes siguen apareciendo como no incrustadas: no existe un control real sobre si las fuentes están incrustadas, así que acepté que esto no funcionaba y continué. . La solución sugerida de Microsoft (http://blogs.msdn.com/b/donovans/archive/2007/07/20/reporting-services-pdf-renderer-faq.aspx en "Cuándo incrustados los servicios de informes") es procesar el PDF para incrustar manualmente las fuentes.
Objetivo Tome un documento PDF ya generado, programáticamente 'ábralo' e incruste las fuentes, vuelva a guardar el PDF.
Enfoque me señaló hacia iTextSharp, pero la mayoría de los ejemplos son para la versión de Java y estoy teniendo problemas para traducir a la versión iTextSharp (no puedo encontrar ninguna documentación para iTextSharp).
Estoy trabajando en esta publicación para lo que necesito hacer: Itext embed font in a PDF.
Sin embargo, por mi vida, parece que no puedo usar el objeto ByteArrayOutputStream. Parece que no puede encontrarlo. Investigué e investigé pero nadie parece decir en qué clase está o dónde lo encuentro, así que puedo incluirlo en las declaraciones de uso. Incluso he descifrado Reflector abierto y parece que no puedo encontrarlo en ningún lado.
Esto es lo que tengo hasta ahora y compila etc. etc. (el resultado es mi byte [] del PDF generado).
PdfReader pdf = new PdfReader(result);
BaseFont unicode = BaseFont.CreateFont("Georgia", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
// the next line doesn't work as I need a ByteArrayOutputStream variable to pass in
PdfStamper stamper = new PdfStamper(pdf, MISSINGBYTEARRAYOUTPUTSTREAMVARIABLE);
stamper.AcroFields.SetFieldProperty("test", "textfont", unicode, null);
stamper.Close();
pdf.Close();
Entonces, ¿puede cualquier persona, sea que me ayude con el uso de iTextSharp incrustar fuentes en un archivo PDF o me punto en la dirección correcta?
Estoy más que feliz de utilizar cualquier otra solución que no sea iTextSharp para completar este objetivo, pero debe ser gratuita y puede ser utilizada por una empresa para una aplicación interna (es decir, Affero GPL).
¿Podría dar los nombres de las fuentes que necesita para incrustar? (Algunas fuentes tienen licencias que no permiten la incrustación, y la mayoría del procesamiento de PDF o la creación de software respeta las banderas respectivas en los archivos de fuentes y elige no incrustarlas ...) –
¡Claro! Georgia y Calibri: he comprobado que tenemos versiones TrueType y (bueno, según Windows) ambos tienen la etiqueta 'Embedability de la fuente' configurada como 'Editable'. ¿Debo entender que esta es la configuración correcta? ¡Gracias por cualquier ayuda! – hanzworld
Para cualquiera que lea esto más adelante, ambos métodos funcionaron. SQL Reporting Services finalmente incrustó las fuentes correctamente después de muchas actualizaciones/revisiones y podría enviarse directamente a la impresora. Adicionalmente, llamado Ghostscript usando ProcessInfo desde .NET podría postprocesar el PDF. – hanzworld