[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[已解决]20元求修改pdf文件

文件夹有很多pdf,目前的操作是,用emeditor打开,提示“2进制(ASCII)”打开,确认。之后替换“BitsPerComponent 1/ColorSpace/DeviceGray”为“ImageMask true/BitsPerComponent 1       ”,两个的长度一样,后面的空格是补足长度。最后,保存修改。
替换的目的是,这些图像pdf经过acrobat的批量OCR,这样替换处理之后,背景透明。就可以修改背景颜色,有利于保护视力。
问题是,需要一个一个打开,比较慢。我的想法是,加快这个替换。
第一,直接用批处理来达到目的。
第二,批处理调用emeditor,自动替换保存。

不知道能不能做到。感谢帮助。

"BitsPerComponent 1/ColorSpace/DeviceGray" 这个字符串在 PDF 文件中的位置是固定的吗?比如全部位于文件开头,或者全部位于第 N 个字节。
能给个样本吗?
1

评分人数

    • lxh623: 谢谢老朋友!技术 + 1

TOP

  1. @echo off
  2. set info=互助互利,支付宝扫码头像,感谢赞助
  3. rem 有问题,可加QQ956535081及时沟通
  4. title %info%
  5. set "rootpath=%~dp0"
  6. cd /d "%rootpath%"
  7. set "comm=reptxt32.exe"
  8. if not exist "%comm%" (echo;"%comm%"不存在,先下载http://bcn.bathome.net/tool/reptxt32.exe&goto end)
  9. for /f "delims=" %%a in ('dir /a-d/b *.pdf') do (
  10.     echo;%%a
  11.     "%comm%" "%%a" "BitsPerComponent 1/ColorSpace/DeviceGray" "ImageMask true/BitsPerComponent 1       "
  12. )
  13. :end
  14. echo;%info%
  15. pause
复制代码
1

评分人数

    • lxh623: 请查收。谢谢!技术 + 1
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

"BitsPerComponent 1/ColorSpace/DeviceGray" 这个字符串在 PDF 文件中的位置是固定的吗?比如全部位于文件 ...
WHY 发表于 2019-7-29 10:50


样本来一页。acrobat里面ocr,就会变成不透明。

TOP

我也l贴一个,PowerShell 脚本
  1. $str1 = 'BitsPerComponent 1/ColorSpace/DeviceGray';
  2. $str2 = 'ImageMask true/BitsPerComponent 1       ';
  3. $arr  = [byte[]][char[]]$str2;
  4. if( ![IO.Directory]::Exists('.\new') ){ $null = md .\new; }
  5. forEach( $a In (dir *.pdf -File) ){
  6.     $Bytes = [IO.File]::ReadAllBytes($a.FullName);
  7.     $Count = $Bytes.Count - $arr.Count;
  8.     for( $i=0; $i -lt $Count; $i++ ){
  9.         $s = [Text.Encoding]::ASCii.GetString( $Bytes[$i..($i + $arr.Count - 1)] );
  10.         if( $s -eq $str1 ){
  11.             for( $j=0; $j -lt $arr.Count; $j++ ){ $Bytes[$i+$j] = $arr[$j]; }
  12.             break;
  13.         }
  14.     }
  15.     [IO.File]::WriteAllBytes( '.\new\' + $a.Name, $Bytes );
  16. }
  17. pause
复制代码
1

评分人数

TOP

本帖最后由 flashercs 于 2019-7-29 20:43 编辑
  1. @echo off
  2. REM 需要处理的文件所在目录
  3. set "dirpath=C:\EmEditor"
  4. REM 文件类型
  5. set "filePattern=*.pdf"
  6. REM 需要替换的源字符串
  7. set "srcString=BitsPerComponent 1/ColorSpace/DeviceGray"
  8. REM 替换后的字符串
  9. set "dstString=ImageMask true/BitsPerComponent 1       "
  10. start "" emeditor /act
  11. timeout 5
  12. for /f "delims=" %%A in ('where /f "%dirpath%:%filePattern%"') do (
  13.   echo %%A
  14.   emeditor %%A /cp 65539 /rc "%srcString%" /rw "%dstString%"
  15. )
  16. timeout 5
  17. emeditor /sca
  18. pause
  19. exit /b
复制代码
1

评分人数

微信:flashercs
QQ:49908356

TOP

返回列表