{"id":690,"date":"2023-07-04T11:07:49","date_gmt":"2023-07-04T10:07:49","guid":{"rendered":"https:\/\/work.claudiotereso.com\/?p=690"},"modified":"2023-07-04T19:31:34","modified_gmt":"2023-07-04T18:31:34","slug":"converter-pdf-em-pdf-a-quando-programar-ainda-e-a-melhor-solucao","status":"publish","type":"post","link":"https:\/\/work.claudiotereso.com\/en\/converter-pdf-em-pdf-a-quando-programar-ainda-e-a-melhor-solucao\/","title":{"rendered":"Converter pdf em pdf\/a: Quando programar ainda \u00e9 a melhor solu\u00e7\u00e3o"},"content":{"rendered":"<!--themify_builder_content-->\n<div id=\"themify_builder_content-690\" data-postid=\"690\" class=\"themify_builder_content themify_builder_content-690 themify_builder tf_clear\">\n    \t<!-- module_row -->\n\t<div  data-lazy=\"1\" class=\"module_row themify_builder_row tb_3rcl46 tb_first clearfix\">\n\t    \t\t<div class=\"row_inner col_align_top tf_box tf_w tf_rel\">\n\t\t\t<div  data-lazy=\"1\" class=\"module_column tb-column col-full first tb_f8bs47 tf_box\">\n\t    \t    \t        <div class=\"tb-column-inner tf_box tf_w\">\n\t\t    <!-- module text -->\n<div  class=\"module module-text tb_pohj849\" data-lazy=\"1\">\n            <div  class=\"tb_text_wrap\">\n    <p>Ao que consta, h\u00e1 servi\u00e7os municipalizados que s\u00f3 aceitam <em>pdfs<\/em> no formato <a href=\"https:\/\/pt.wikipedia.org\/wiki\/PDF\/A\" target=\"_blank\" rel=\"noopener\"><em><span class='tooltipsall tooltip_post_id_custom_9f301ac09f0ce1092813660d22149e2b classtoolTipsCustomShortCode' style='border-bottom:2px dotted #888;'>pdf\/a<\/span><script type=\"text\/javascript\">jQuery(\"document\").ready(function(){ toolTips('.tooltip_post_id_custom_9f301ac09f0ce1092813660d22149e2b','\\'O PDF\\\/A \u00e9, na verdade, um subconjunto de PDF obtido excluindo as caracter\u00edsticas sup\u00e9rfluas para arquivamento de longo prazo\\.\\' \\(wikipedia\\)'); });<\/script><\/em><\/a> e a minha colega que estava a tratar do assunto estava com dificuldades em fazer a convers\u00e3o; estava a usar servi\u00e7os online mas alguns s\u00f3 davam uma vez e depois pediam pagamentos e outros n\u00e3o pediam nada mas tamb\u00e9m n\u00e3o convertiam em condi\u00e7\u00f5es.<\/p>\n<p>Quando ela me falou no problema, o meu primeiro passo foi ver se o <a href=\"https:\/\/www.debenu.com\/blog\/debenu-pdf-tools-pro-3-released.html\" target=\"_blank\" rel=\"noopener\">Debenu PDF Tools<\/a> (vers\u00e3o gratuita) que usamos para juntar\/dividir <em>pdfs<\/em> tamb\u00e9m fazia essa convers\u00e3o. N\u00e3o faz.<\/p>\n<p>Como n\u00e3o sou f\u00e3 de servi\u00e7os em que precisamos de enviar os nossos <em>pdfs<\/em> para a Internet, dei uma vista de olhos pelos motores de busca e pelo ChatGPT\u00a0 \u00e0 procura de solu\u00e7\u00f5es que funcionassem offline, e o \u00fanico programa que encontrei foi o <a href=\"https:\/\/www.pdf24.org\/pt\/\" target=\"_blank\" rel=\"noopener\">pdf24<\/a>.\u00a0 A solu\u00e7\u00e3o funciona, mas n\u00e3o me pareceu suficientemente pr\u00e1tica para a simplicidade do que era pretendido.<\/p>\n<p>Como tenho a funcionar uma aplica\u00e7\u00e3o desenvolvida em Java com o <a href=\"https:\/\/pdfbox.apache.org\/\" target=\"_blank\" rel=\"noopener\">pdfBox<\/a> que manipula <em>pdfs<\/em> para fazer o arquivo digital da contabilidade achei que, usando o c\u00f3digo que j\u00e1 tinha, era f\u00e1cil solucionar o problema. Infelizmente, o pdfBox n\u00e3o tem (ou n\u00e3o achei) esta capacidade.<\/p>\n<p>Voltei a pedir ao ChatGPT para me fazer o c\u00f3digo, mas o malvado s\u00f3 me deu um pseudoc\u00f3digo a dizer o que eu j\u00e1 sabia. bah!<\/p>\n<p>Dei mais uma volta \u00e0 Net e descobri uma biblioteca de Java que fazia o pretendido, a <a href=\"https:\/\/www.e-iceblue.com\/Introduce\/free-pdf-for-java.html\" target=\"_blank\" rel=\"noopener\">Free Spire.PDF for Java<\/a>. N\u00e3o foi preciso muito tempo para descobrir o c\u00f3digo m\u00e1gico que converte o pdf no sub-formato pretendido:<\/p>\n<p><code>PdfStandardsConverter converter = new PdfStandardsConverter(filein);<\/code><br \/><code>converter.toPdfA3B(fileout);<\/code><\/p>\n<p>Mais simples, \u00e9 dif\u00edcil. Juntei meia d\u00fazia de linhas de c\u00f3digo do meu programa de processamento de documentos de contabilidade e <em>voil\u00e1<\/em>: um programa de l\u00ea todos os <em>pdfs<\/em> de uma pasta e grava em formato <em>pdf\/a<\/em> noutra. Demorei menos tempo a fazer o programa do que o tempo que perdi \u00e0 procura de uma solu\u00e7\u00e3o pr\u00e9-feita que me resolvesse o programa.<\/p>\n<p>N\u00e3o \u00e9 todos os dias, mas de vez em quando ainda justifica programar as nossas pr\u00f3prias solu\u00e7\u00f5es para problemas gen\u00e9ricos.<\/p>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr>\n<td style=\"width: 47.3138%;\">\n<figure id=\"attachment_696\" aria-describedby=\"caption-attachment-696\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-696 size-medium\" src=\"https:\/\/work.claudiotereso.com\/wp-content\/uploads\/2023\/07\/pdfa-300x267.png\" alt=\"\" width=\"300\" height=\"267\" srcset=\"https:\/\/work.claudiotereso.com\/wp-content\/uploads\/2023\/07\/pdfa-300x267.png 300w, https:\/\/work.claudiotereso.com\/wp-content\/uploads\/2023\/07\/pdfa.png 654w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><figcaption id=\"caption-attachment-696\" class=\"wp-caption-text\">Fig. 1 Identificar que ficheiro est\u00e1 em pdf\/a<\/figcaption><\/figure>\n<\/td>\n<td style=\"width: 52.6862%;\">\n<figure id=\"attachment_695\" aria-describedby=\"caption-attachment-695\" style=\"width: 409px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-695\" src=\"https:\/\/work.claudiotereso.com\/wp-content\/uploads\/2023\/07\/pdf_2_pdfa-300x154.png\" alt=\"\" width=\"409\" height=\"210\" srcset=\"https:\/\/work.claudiotereso.com\/wp-content\/uploads\/2023\/07\/pdf_2_pdfa-300x154.png 300w, https:\/\/work.claudiotereso.com\/wp-content\/uploads\/2023\/07\/pdf_2_pdfa-1024x526.png 1024w, https:\/\/work.claudiotereso.com\/wp-content\/uploads\/2023\/07\/pdf_2_pdfa-768x394.png 768w, https:\/\/work.claudiotereso.com\/wp-content\/uploads\/2023\/07\/pdf_2_pdfa-1536x788.png 1536w, https:\/\/work.claudiotereso.com\/wp-content\/uploads\/2023\/07\/pdf_2_pdfa.png 1586w\" sizes=\"auto, (max-width: 409px) 100vw, 409px\" \/><figcaption id=\"caption-attachment-695\" class=\"wp-caption-text\">Fig 2. pdf2pdfa em execu\u00e7\u00e3o<\/figcaption><\/figure>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Podem descarregar aqui o <a href=\"https:\/\/claudiotereso-my.sharepoint.com\/:u:\/p\/claudio\/EeOnjUbu8S9PrZZ6_IYkDLABV8--5uRhdmzqiD_64nS4PA?e=OdfE9n\" target=\"_blank\" rel=\"noopener\">pdf2pdfa<\/a>. \u00c9 um zip que tem o ficheiro java, um <i>script <\/i>que corre o programa e um ficheiro teste. Para usar, \u00e9 s\u00f3 descomprimir a pasta, colocar os ficheiros pretendidos na pasta pdfIn, correr o script e colher os frutos na pasta pdfOut. E claro, t\u00eam de ter um <a href=\"https:\/\/www.java.com\/pt-BR\/download\/ie_manual.jsp?locale=pt_BR\" target=\"_blank\" rel=\"noopener\">JAVA<\/a> instalado.<\/p>\n<p>NOTA: Foi testado com meia d\u00fazia de ficheiros e funcionou bem, n\u00e3o prometo que funcione bem com todos os ficheiros.\u00a0<\/p>\n<div class=\"mceTemp\">\u00a0<\/div>\n<div class=\"mceTemp\">\u00a0<\/div>    <\/div>\n<\/div>\n<!-- \/module text -->\t        <\/div>\n\t    \t<\/div>\n\t\t    <\/div>\n\t    <!-- \/row_inner -->\n\t<\/div>\n\t<!-- \/module_row -->\n\t<\/div>\n<!--\/themify_builder_content-->","protected":false},"excerpt":{"rendered":"<p>Para resolver o problema de converter pdfs em pdf\/a desenvolvi uma pequena aplica\u00e7\u00e3o em Java que resolve o problema e ficou pronta em menos de 1 hora.<\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[44,14],"tags":[45,15],"class_list":["post-690","post","type-post","status-publish","format-standard","hentry","category-java","category-programming","tag-java","tag-programacao","has-post-title","has-post-date","has-post-category","has-post-tag","has-post-comment","has-post-author",""],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/work.claudiotereso.com\/en\/wp-json\/wp\/v2\/posts\/690","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/work.claudiotereso.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/work.claudiotereso.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/work.claudiotereso.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/work.claudiotereso.com\/en\/wp-json\/wp\/v2\/comments?post=690"}],"version-history":[{"count":25,"href":"https:\/\/work.claudiotereso.com\/en\/wp-json\/wp\/v2\/posts\/690\/revisions"}],"predecessor-version":[{"id":737,"href":"https:\/\/work.claudiotereso.com\/en\/wp-json\/wp\/v2\/posts\/690\/revisions\/737"}],"wp:attachment":[{"href":"https:\/\/work.claudiotereso.com\/en\/wp-json\/wp\/v2\/media?parent=690"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/work.claudiotereso.com\/en\/wp-json\/wp\/v2\/categories?post=690"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/work.claudiotereso.com\/en\/wp-json\/wp\/v2\/tags?post=690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}