c# - puede - paquete de fuentes adobe reader dc
¿Cómo incrusto las fuentes en un PDF existente? (2)
Además de Ghostscript, también es posible usar Poppler y Cairo. Hay un comando pdftocairo
de Poppler que convierte PDF a PDF a través de pdftocairo -pdf input.pdf output.pdf
. También considera las sustituciones de fuentes establecidas en un archivo de configuración Fontconfig . Esto es muy útil si no tiene todas las fuentes en su sistema a las que se hace referencia en un archivo PDF, pero sepa qué otra fuente que ha instalado es un reemplazo atractivo. Después del procesamiento, la fuente de sustitución está incrustada.
Fondo:
Tengo PDF''s que estoy generando programáticamente. 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 están incrustadas cuando se generan:
Estoy creando PDF utilizando SQL Reporting Services 2008. Hay un problema conocido con SQL Reporting Services en el sentido de que no incrustará las fuentes (a menos que se cumplan una serie de requisitos - 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 alternativa sugerida por Microsoft ( http://blogs.msdn.com/b/donovans/archive/2007/07/20/reporting-services-pdf-renderer-faq.aspx en ''¿Cuándo se incrusta la fuente de los servicios de informes''?) es postprocesar 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 apuntaron hacia iTextSharp, pero la mayoría de los ejemplos son para la versión de Java y tengo problemas para traducir a la versión de iTextSharp (no puedo encontrar ninguna documentación para iTextSharp).
Estoy trabajando en esta publicación para lo que necesito hacer: Itext incrusta la fuente en un 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, ¿alguien puede ayudarme a usar iTextSharp para incrustar fuentes en un PDF o señalarme 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 poder ser utilizada por una empresa para una aplicación interna (es decir, Affero GPL).
Puede que esta no sea la respuesta que está buscando (ya que quiere que sus problemas se resuelvan mediante programación, no con una herramienta externa).
Pero puede usar la línea de comandos de Ghostscript para incrustar las fuentes que faltan en retrospectiva a archivos PDF que no las han incrustado:
gs /
-sFONTPATH=/path/to/fonts:/another/dir/with/more/fonts /
-o output-pdf-with-embedded-fonts.pdf /
-sDEVICE=pdfwrite /
-dPDFSETTINGS=/prepress /
input-pdf-where-some-fonts-are-not-embedded.pdf
Una cosa importante es que las fuentes que faltan están todas disponibles en uno de los directorios apuntados por el -sFontPath=...