首页 > 解决方案 > pdftools - Helvetica (?) 字体扭曲文本导入

问题描述

我正在努力正确阅读包含 Helvetica 字体的 pdf pdftools

我正在尝试从大约 1000 条投票记录中提取信息。总体而言,pdftools按预期工作。但是,有一两百个 pdf 文件无法正确读取提取的文本。取而代之的是部分文本,例如第一行(= 标题),由一些“任意”字符组成。

据我所知,工作和不工作的唯一区别是 a) 字体(那些不工作的包含 Helvetica)和 b) pdf 的创建方式。似乎那些可以正常工作的 pdf 是在 Excle 中创建的,而那些不能正常工作的 pdf 是使用“Microsoft Reporting Service PDF Rendering Extension 10.0.0.0”创建的。

下面是我的代表,它给出了成功和不成功的导入示例。

我知道 Helvetica 经常会导致问题,因为它通常不会安装在 Windows 机器上。不过,据我所知,我的机器上有 Helvetica(虽然我并不真正理解pdf_font命令的结果;为什么嵌入了“假”)。

非常感谢!

library(tidyverse, suppressWarnings())
library(pdftools)

link.ok <- "http://parlament.ba/oLaw/GetOwisDocument/?documentId=103320&data=9A4B80C1CB2A8BA6617949C64776F770&lang=bs"
link.notok <- "http://parlament.ba/oLaw/GetOwisDocument/?documentId=125266&data=BE111A5A0468C6C5A5A926FE35A37965&lang=bs"
link.notok2 <- "http://parlament.ba/oLaw/GetOwisDocument/?documentId=132385&data=9AAAAC17DF6FCD761F951F58799E63ED&lang=bs"

从三个文档中获取字体。那些未正确导入的包含 Helvetica。

c(link.ok, link.notok, link.notok2) %>% 
  set_names() %>% 
map(., pdftools::pdf_fonts)

#> $`http://parlament.ba/oLaw/GetOwisDocument/?documentId=103320&data=9A4B80C1CB2A8BA6617949C64776F770&lang=bs`
#> # A tibble: 4 x 4
#>   name                type         embedded file 
#>   <chr>               <chr>        <lgl>    <chr>
#> 1 ABCDEE+Calibri,Bold truetype     TRUE     ""   
#> 2 ABCDEE+Calibri      truetype     TRUE     ""   
#> 3 ABCDEE+Calibri      cid_truetype TRUE     ""   
#> 4 ABCDEE+Calibri,Bold cid_truetype TRUE     ""   
#> 
#> $`http://parlament.ba/oLaw/GetOwisDocument/?documentId=125266&data=BE111A5A0468C6C5A5A926FE35A37965&lang=bs`
#> # A tibble: 4 x 4
#>   name            type        embedded file                                
#>   <chr>           <chr>       <lgl>    <chr>                               
#> 1 Helvetica-Bold  type1       FALSE    "C:\\WINDOWS\\Fonts\\Helvetica-Bold~
#> 2 ABCDEE+Arial,B~ cid_truety~ TRUE     ""                                  
#> 3 Helvetica       type1       FALSE    "C:\\WINDOWS\\Fonts\\Helvetica.ttf" 
#> 4 ABCDEE+Arial    cid_truety~ TRUE     ""                                  
#> 
#> $`http://parlament.ba/oLaw/GetOwisDocument/?documentId=132385&data=9AAAAC17DF6FCD761F951F58799E63ED&lang=bs`
#> # A tibble: 4 x 4
#>   name            type        embedded file                                
#>   <chr>           <chr>       <lgl>    <chr>                               
#> 1 Helvetica-Bold  type1       FALSE    "C:\\WINDOWS\\Fonts\\Helvetica-Bold~
#> 2 ABCDEE+Arial,B~ cid_truety~ TRUE     ""                                  
#> 3 Helvetica       type1       FALSE    "C:\\WINDOWS\\Fonts\\Helvetica.ttf" 
#> 4 ABCDEE+Arial    cid_truety~ TRUE     ""

从三个文档中获取文本。注意第一个字符的区别。

c(link.ok, link.notok, link.notok2) %>% 
  set_names() %>% 
  map(., pdftools::pdf_text)
#> $`http://parlament.ba/oLaw/GetOwisDocument/?documentId=103320&data=9A4B80C1CB2A8BA6617949C64776F770&lang=bs`
#> [1] "                                       Rezultati glasanja\r\nSjednica:            41. sjednica Doma naroda Parlamentarne skupštine Bosne i Hercegovine\r\nDatum održavanja:    2014-09-10 12:18\r\nNacin glasanja:      otvoreno\r\nRedni broj:          Tacka 4\r\nGlasanje o:          Prijedlogu zakona o izmjenama i dopunama Zakona o politici direktnih\r\n                     stranih ulaganja u Bosnu i Hercegovinu (prvo citanje), predlagac: Vijece\r\n                     ministara BiH, zakon broj: 01,02-02-1-30/14, od 17.7.2014.;\r\nTip glasanje:        Prvi krug\r\n Prisutno                                        13\r\n Ukupno                                          13\r\n ZA                                              12\r\n PROTIV                                           0\r\n SUZDRŽAN                                         1\r\n Sulejman Tihic                     Delegat FBiH                      Nije prisutan\r\n Halid Genjac                       Delegat FBiH                      ZA\r\n Nermina Kapetanovic                Delegat FBiH                      ZA\r\n Seudin Hodžic                      Delegat FBiH                      Nije prisutan\r\n Mehmed Bradaric                    Delegat FBiH                      ZA\r\n Dragan Covic                       Delegat FBiH                      ZA\r\n Martin Raguž                       Delegat FBiH                      ZA\r\n Stjepan Krešic                     Delegat FBiH                      ZA\r\n Krunoslav Vrdoljak                 Delegat FBiH                      ZA\r\n Borjana Krišto                     Delegat FBiH                      ZA\r\n Ognjen Tadic                       Delegat RS                        ZA\r\n Dragutin Rodic                     Delegat RS                        ZA\r\n Mladen Ivanic                      Delegat RS                        SUZDRŽAN\r\n Krstan Simic                       Delegat RS                        ZA\r\n Staša Košarac                      Delegat RS                        ZA\r\n                      ZA        PROTIV    SUZDRŽAN      NIJE PRISUTAN         UKUPNO\r\n           FBiH        8           0           0               2                 10\r\n           RS          4           0           1               0                  5\r\n           UKUPNO     12           0           1               2                 15\r\n"
#> 
#> $`http://parlament.ba/oLaw/GetOwisDocument/?documentId=125266&data=BE111A5A0468C6C5A5A926FE35A37965&lang=bs`
#> [1] "      20\021\003VMHGQLFD\0033UHGVWDYQLþNRJ\003GRPD\0033DUODPHQWDUQH\003VNXSãWLQH\003%RVQH\003L\003+HUFHJRYLQH\r\n                                           - 24.11.2015. -\r\nRedni broj glasanja:         12\r\nDatum i vrijeme glasanja:    24.11.2015. 21:13\r\n1DþLQ\003JODVDQMD\035              Javno\r\n5HGQL\003EURM\003WDþNH\035            4\r\n                             3ULMHGORJ\003]DNRQD\003R\003D]LOX\017\003SUHGODJDþ\035\0039LMHüH\003PLQLVWDUD\003%L+\017\003]DNRQ\003EURM\035\003\023\024\017\023\025\020\r\n7DþND\003GQHYQRJ\003UHGD\035\r\n                             \023\025\020\024\020\024\025\022\024\030\017\003RG\003\031\021\033\021\025\023\024\030\021\003 GUXJR\003þLWDQMH\r\n                             Amandman I. poslanika Damira Arnauta\r\nGlasanje o:                  Amandman II. poslanika Damira Arnauta\r\n                             Amandman III. poslanika Damira Arnauta\r\nTip glasanja:                Prvi krug\r\nPrisutan                     37\r\nNije prisutan                5\r\nUkupno                       42\r\nZA                           26\r\nPROTIV                       11\r\nSUZDRŽAN                     0\r\n1.    Borjana Krišto                    Federacija BiH                       Nije prisutan\r\n2.    0ODGHQ\003\003%RVLü\003                    Republika Srpska                     Za\r\n3.    âHILN\003\003'åDIHURYLü                 Federacija BiH                       Za\r\n4.    $VLP\003\0036DUDMOLü\003                   Federacija BiH                       Za\r\n5.    6DIHU\003\003'HPLURYLü\003                 Federacija BiH                       Za\r\n6.    $PLU\003\003)D]OLü                      Federacija BiH                       Za\r\n7.    1HUPLQD\003\003.DSHWDQRYLü\003             Federacija BiH                       Za\r\n8.    âHPVXGLQ\003\0030HKPHGRYLü\003             Federacija BiH                       Za\r\n9.    +D]LP\0035DQþLü                      Federacija BiH                       Za\r\n10.   6DONR\003\0036RNRORYLü\003                 Federacija BiH                       Za\r\n11.   6HQDG\003\003âHSLü\003                     Federacija BiH                       Za\r\n12.   6DGLN\003\003$KPHWRYLü\003                 Republika Srpska                     Za\r\n13.   äHOMNR\003.RPãLü                     Federacija BiH                       Nije prisutan\r\n14.   'DPLU\003\003%HüLURYLü\003                 Federacija BiH                       Za\r\n15.   0HQVXUD\003%HJDQRYLü\003                Federacija BiH                       Za\r\n16.   Jovan Vukovljak                   Republika Srpska                     Protiv\r\n17.   0LURVODY\003\0030LORYDQRYLü\003            Republika Srpska                     Protiv\r\n18.   /D]DU\003\0033URGDQRYLü\003                Republika Srpska                     Protiv\r\n19.   0LOLFD\003\0030DUNRYLü\003                 Republika Srpska                     Nije prisutan\r\n20.   'XãDQND\003\0030DMNLü\003                  Republika Srpska                     Protiv\r\n21.   Staša Košarac                     Republika Srpska                     Protiv\r\n"
#> [2] "22.  1LNROD\003âSLULü            Republika Srpska            Protiv\r\n23.  Maja Gasal-Vražalica     Federacija BiH              Za\r\n24.  +DQND\003\0039DM]RYLü\003         Federacija BiH              Za\r\n25.  Predrag Kožul            Federacija BiH              Za\r\n26.  0RQLND\003\0037RPLü\003           Federacija BiH              Za\r\n27.  1LNROD\003\003/RYULQRYLü\003      Federacija BiH              Za\r\n28.  Diana Zelenika           Federacija BiH              Za\r\n29.  1HQDG\003\003/DOLü\003            Republika Srpska            Protiv\r\n30.  CRUÿR\003\003.UþPDU\003           Republika Srpska            Protiv\r\n31.  %RULVODY\003\003%RMLü\003         Republika Srpska            Nije prisutan\r\n32.  $OHNVDQGUD\003\0033DQGXUHYLü\003  Republika Srpska            Protiv\r\n33.  0LUVDG\003\003CRQODJLü\003        Federacija BiH              Za\r\n34.  Damir Arnaut             Federacija BiH              Za\r\n35.  0LUVDG\003\003,VDNRYLü\003        Federacija BiH              Za\r\n36.  )HKLP\003\003âNDOMLü\003          Federacija BiH              Nije prisutan\r\n37.  0LUVDG\003\0030HãLü\003           Federacija BiH              Za\r\n38.  'HQLV\003\003%HüLURYLü\003        Federacija BiH              Protiv\r\n39.  6DãD\003\0030DJD]LQRYLü\003       Federacija BiH              Za\r\n40.  =DLP\003\003%DFNRYLü\003          Federacija BiH              Za\r\n41.  -DVPLQ\003\003(PULü\003           Federacija BiH              Za\r\n42.  0RPþLOR\003\0031RYDNRYLü\003      Republika Srpska            Protiv\r\n                         ZA  PROTIV        SUZDRŽAN NIJE PRISUTAN       UKUPNO\r\nFBIH                     24     1              0           3              28\r\nRS                        2    10              0           2              14\r\nUKUPNO                   26    11              0           5              42\r\n"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
#> 
#> $`http://parlament.ba/oLaw/GetOwisDocument/?documentId=132385&data=9AAAAC17DF6FCD761F951F58799E63ED&lang=bs`
#> [1] "      25\021\003VMHGQLFD\0033UHGVWDYQLþNRJ\003GRPD\0033DUODPHQWDUQH\003VNXSãWLQH\003%RVQH\003L\003+HUFHJRYLQH\r\n                                           - 16.02.2016. -\r\nRedni broj glasanja:         6\r\nDatum i vrijeme glasanja:    16.02.2016. 16:21\r\n1DþLQ\003JODVDQMD\035              Javno\r\n5HGQL\003EURM\003WDþNH\035            4\r\n                             Prijedlog zakona o izmjenama i dopunama Zakona o službi u Oružanim\r\n7DþND\003GQHYQRJ\003UHGD\035          VQDJDPD\003%RVQH\003L\003+HUFHJRYLQH\017\003SUHGODJDþ\035\0039LMHüH\003PLQLVWDUD\003%L+\017\003]DNRQ\003EURM\035\003\r\n                             \023\024\017\023\025\020\023\025\020\024\020\025\031\022\024\030\017\003RG\003\024\032\021\024\025\021\025\023\024\030\021\003 SUYR\003þLWDQMH\r\nTip glasanja:                Prvi krug\r\nPrisutan                     35\r\nNije prisutan                7\r\nUkupno                       42\r\nZA                           30\r\nPROTIV                       0\r\nSUZDRŽAN                     5\r\n1.    âHILN\003\003'åDIHURYLü                 Federacija BiH                      Za\r\n2.    Borjana Krišto                    Federacija BiH                      Za\r\n3.    0ODGHQ\003\003%RVLü\003                    Republika Srpska                    Za\r\n4.    $PLU\003\003)D]OLü                      Federacija BiH                      Za\r\n5.    6DIHU\003\003'HPLURYLü\003                 Federacija BiH                      Za\r\n6.    1HUPLQD\003\003.DSHWDQRYLü\003             Federacija BiH                      Nije prisutan\r\n7.    âHPVXGLQ\003\0030HKPHGRYLü\003             Federacija BiH                      Nije prisutan\r\n8.    +D]LP\0035DQþLü                      Federacija BiH                      Nije prisutan\r\n9.    $VLP\003\0036DUDMOLü\003                   Federacija BiH                      Za\r\n10.   6DONR\003\0036RNRORYLü\003                 Federacija BiH                      Za\r\n11.   6HQDG\003\003âHSLü\003                     Federacija BiH                      Za\r\n12.   6DGLN\003\003$KPHWRYLü\003                 Republika Srpska                    Za\r\n13.   äHOMNR\003.RPãLü                     Federacija BiH                      Nije prisutan\r\n14.   'DPLU\003\003%HüLURYLü\003                 Federacija BiH                      Suzdržan\r\n15.   0HQVXUD\003%HJDQRYLü\003                Federacija BiH                      Suzdržan\r\n16.   Jovan Vukovljak                   Republika Srpska                    Za\r\n17.   0LURVODY\003\0030LORYDQRYLü\003            Republika Srpska                    Za\r\n18.   /D]DU\003\0033URGDQRYLü\003                Republika Srpska                    Za\r\n19.   0LOLFD\003\0030DUNRYLü\003                 Republika Srpska                    Za\r\n20.   'XãDQND\003\0030DMNLü\003                  Republika Srpska                    Za\r\n21.   Staša Košarac                     Republika Srpska                    Za\r\n22.   1LNROD\003âSLULü                     Republika Srpska                    Nije prisutan\r\n23.   Maja Gasal-Vražalica              Federacija BiH                      Suzdržan\r\n24.   +DQND\003\0039DM]RYLü\003                  Federacija BiH                      Suzdržan\r\n"
#> [2] "25.  Predrag Kožul            Federacija BiH              Za\r\n26.  0RQLND\003\0037RPLü\003           Federacija BiH              Za\r\n27.  1LNROD\003\003/RYULQRYLü\003      Federacija BiH              Za\r\n28.  Diana Zelenika           Federacija BiH              Nije prisutan\r\n29.  1HQDG\003\003/DOLü\003            Republika Srpska            Za\r\n30.  CRUÿR\003\003.UþPDU\003           Republika Srpska            Nije prisutan\r\n31.  %RULVODY\003\003%RMLü\003         Republika Srpska            Za\r\n32.  $OHNVDQGUD\003\0033DQGXUHYLü\003  Republika Srpska            Za\r\n33.  0LUVDG\003\003CRQODJLü\003        Federacija BiH              Za\r\n34.  Damir Arnaut             Federacija BiH              Za\r\n35.  0LUVDG\003\003,VDNRYLü\003        Federacija BiH              Za\r\n36.  )HKLP\003\003âNDOMLü\003          Federacija BiH              Za\r\n37.  0LUVDG\003\0030HãLü\003           Federacija BiH              Za\r\n38.  'HQLV\003\003%HüLURYLü\003        Federacija BiH              Suzdržan\r\n39.  6DãD\003\0030DJD]LQRYLü\003       Federacija BiH              Za\r\n40.  =DLP\003\003%DFNRYLü\003          Federacija BiH              Za\r\n41.  -DVPLQ\003\003(PULü\003           Federacija BiH              Za\r\n42.  0RPþLOR\003\0031RYDNRYLü\003      Republika Srpska            Za\r\n                         ZA  PROTIV        SUZDRŽAN NIJE PRISUTAN       UKUPNO\r\nFBIH                     18    0               5           5              28\r\nRS                       12    0               0           2              14\r\nUKUPNO                   30    0               5           7              42\r\n"

会话信息:

    sessionInfo()
    #> R version 3.4.3 (2017-11-30)
    #> Platform: x86_64-w64-mingw32/x64 (64-bit)
    #> Running under: Windows 10 x64 (build 17763)
    #> 
    #> Matrix products: default
    #> 
    #> locale:
    #> [1] LC_COLLATE=English_Austria.1252  LC_CTYPE=English_Austria.1252   
    #> [3] LC_MONETARY=English_Austria.1252 LC_NUMERIC=C                    
    #> [5] LC_TIME=English_Austria.1252    
    #> 
    #> attached base packages:
    #> [1] stats     graphics  grDevices utils     datasets  methods   base     
    #> 
    #> other attached packages:
    #>  [1] pdftools_2.2    forcats_0.4.0   stringr_1.4.0   dplyr_0.8.0.1  
    #>  [5] purrr_0.3.2     readr_1.3.1     tidyr_0.8.3     tibble_2.1.1   
    #>  [9] ggplot2_3.1.1   tidyverse_1.2.1
    #> 
    #> loaded via a namespace (and not attached):
    #>  [1] Rcpp_1.0.1       cellranger_1.1.0 pillar_1.3.1     compiler_3.4.3  
    #>  [5] highr_0.8        plyr_1.8.4       tools_3.4.3      digest_0.6.18   
    #>  [9] lubridate_1.7.4  jsonlite_1.6     evaluate_0.13    nlme_3.1-131    
    #> [13] gtable_0.3.0     lattice_0.20-35  pkgconfig_2.0.2  rlang_0.3.4     
    #> [17] cli_1.1.0        yaml_2.2.0       haven_2.1.0      xfun_0.6        
    #> [21] withr_2.1.2      xml2_1.2.0       httr_1.4.0       knitr_1.22      
    #> [25] askpass_1.1      hms_0.4.2        generics_0.0.2   grid_3.4.3      
    #> [29] tidyselect_0.2.5 glue_1.3.1       qpdf_1.1         R6_2.4.0        
    #> [33] fansi_0.4.0      readxl_1.3.1     rmarkdown_1.12   modelr_0.1.4    
    #> [37] magrittr_1.5     backports_1.1.4  scales_1.0.0     htmltools_0.3.6 
    #> [41] rvest_0.3.2      assertthat_0.2.1 colorspace_1.4-1 utf8_1.1.4      
    #> [45] stringi_1.4.3    lazyeval_0.2.2   munsell_0.5.0    broom_0.5.2     
    #> [49] crayon_1.3.4

标签: rpdfweb-scrapingpdf-scraping

解决方案


推荐阅读