标题: (完结)+50,批量将JPG合并成PDF [打印本页]
作者: hxc1995 时间: 2024-8-6 18:09 标题: (完结)+50,批量将JPG合并成PDF
本帖最后由 hxc1995 于 2024-8-7 09:44 编辑
JPG名称为中文加数字,5级目录下,批量将按中文名称相同合并成一个PDF。
例如照片名称为:胡1.jpg、胡2.jpg、胡3.jpg、李.jpg、张1.jpg、张2.jpg;
成果为:胡.pdf、李.pdf、张.pdf
作者: zaqmlp 时间: 2024-8-6 20:18
本帖最后由 zaqmlp 于 2024-8-7 09:22 编辑
imagemagick下载- /*&cls&echo off&cd /d "%~dp0"
- set "exefile=D:\ImageMagick\magick.exe"
- if not exist "%exefile%" (echo;"%exefile%" not install or path error&goto end)
- for /f "delims=" %%a in ('dir /ad/b/s') do (
- pushd "%%a"
- for /f "delims=" %%b in ('dir /a-d/b *.jpg 2^>nul^|cscript -nologo -e:jscript "%~f0"') do (
- echo;"%%b*.jpg" --^> "%%b.pdf"
- "%exefile%" "%%b*.jpg" "%%b.pdf"
- >nul chcp 936
- )
- popd
- )
- :end
- pause
- exit
- */
- var cn={};
- while(!WSH.StdIn.AtEndOfStream){
- var str=WSH.StdIn.ReadLine();
- var m=str.match(/[\u4e00-\u9fa5]+/);
- if(m && !(m[0] in cn)){WSH.echo(m[0]);cn[m[0]]=1}
- }
复制代码
作者: buyiyang 时间: 2024-8-6 20:47
本帖最后由 buyiyang 于 2024-8-6 20:56 编辑
遍历目录合并jpg为pdf,保存为ansi编码的bat- <# :
- @echo off
- cd /d "%~dp0"
- for /f "delims=" %%i in ('dir /b /ad /s') do (
- pushd "%%i"&&(
- if exist *.jpg (
- echo,%%i
- powershell -c "gc '%~0' | Out-String | iex"
- )
- popd
- )||set /p=%%i<nul
- )
- pause&exit
- #>
-
- [void][Reflection.Assembly]::LoadWithPartialName('System.Drawing')
-
- function Img2Pdf($paramImgGroup) {
- $listImg = New-Object 'System.Collections.ArrayList'
- ForEach ($file In $groups[$paramImgGroup]) {
- [void]$listImg.Add([Drawing.Image]::FromFile($file))
- }
-
- $docPrint = New-Object 'Drawing.Printing.PrintDocument'
- $settingsPrint = New-Object 'Drawing.Printing.PrinterSettings'
- $settingsPrint.PrinterName = 'Microsoft Print to PDF'
- $settingsPrint.PrintToFile = $true
- $settingsPrint.PrintFileName = $paramImgGroup + '.pdf'
- $docPrint.PrinterSettings = $settingsPrint
- $docPrint.DefaultPageSettings.Landscape = $true
-
- $docPrint.add_PrintPage({
- $imgCurrent = $listImg[0]
- $ratioWidth = $_.MarginBounds.Width / $imgCurrent.Width
- $ratioHeight = $_.MarginBounds.Height / $imgCurrent.Height
- $ratioSelected = [Math]::Min($ratioWidth, $ratioHeight)
- $widthNew = [int]($imgCurrent.Width * $ratioSelected)
- $heightNew = [int]($imgCurrent.Height * $ratioSelected)
- $_.Graphics.DrawImage($imgCurrent, ($_.MarginBounds.Left + ($_.MarginBounds.Width - $widthNew) / 2), ($_.MarginBounds.Top + ($_.MarginBounds.Height - $heightNew) / 2), $widthNew, $heightNew)
- $imgCurrent.Dispose()
- $listImg.RemoveAt(0)
- If ($listImg.Count -gt 0) { $_.HasMorePages = $true } Else { $_.HasMorePages = $false }
- })
-
- $docPrint.Print()
- $docPrint.Dispose()
- }
-
- $files = Get-ChildItem -Filter "*.jpg"
- $groups = @{}
-
- ForEach ($file In $files) {
- $partChinese = [regex]::Match($file.Name, '^[\u4e00-\u9fff]+').Value
- If ($partChinese) {
- If (-not $groups.ContainsKey($partChinese)) {
- $groups[$partChinese] = @()
- }
- $groups[$partChinese] += $file
- }
- }
-
- ForEach ($group In $groups.Keys) {
- Write-Output "分组:$group"
- Img2Pdf -paramImgGroup $group
- }
复制代码
作者: 77七 时间: 2024-8-7 00:03
我也用magick写了一个,第二次findstr 一直失败,找了很久的原因,最终发现magick会改变代码页,仅在此分享一下这个“趣事”。- @echo off
- rem 保存为ansi
- cd /d "%~dp0"
- for /r /d %%d in (*) do (
- pushd "%%d"
- for /f "tokens=1* delims=1234567890." %%a in ('2^>nul dir /b /a-d *.jpg') do (
- if not exist "%%a.pdf" (
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d *.jpg ^|findstr /rixc:"%%a[0-9]*\.jpg"') do (
- set name=%%i
- set "num=!name:%%a=!"
- set /a num+=10000
- set #!num!=%%i
- )
- for /f "tokens=1* delims==" %%x in ('set #') do (
- set str=!str! "%%y"
- )
- magick !str! "%%a.pdf"
- chcp 936 >nul
- endlocal
- )
- )
- popd
- )
- pause
复制代码
作者: hxc1995 时间: 2024-8-7 08:56
回复 3# buyiyang
大佬,你写的合出来的PDF排版不对,图片是竖向的,合成的PDF是横向的,有办法解决吗
作者: hxc1995 时间: 2024-8-7 09:08
回复 2# zaqmlp
第一个文件夹成功了,后面一直报错
作者: zaqmlp 时间: 2024-8-7 09:27
回复 6# hxc1995 已修改
作者: hxc1995 时间: 2024-8-7 09:44
本帖最后由 hxc1995 于 2024-8-7 09:47 编辑
回复 7# zaqmlp
OK,没问题了,已支付,能附赠一个批量修改照片名称中文部分吗?例如批量将张1、张2、张3改成陈1、陈2、陈3,还是5级目录下
作者: zaqmlp 时间: 2024-8-7 10:11
回复 8# hxc1995 - <# :
- cls&echo off&cd /d "%~dp0"&rem bat存为ANSI/GB2312编码
- path %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%path%
- set "current=%cd%"
- powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
- pause
- exit
- #>
- $rp=@("张=陈","刘=王");
- $current=($env:current).trimend('\');
- $files=@(dir -literal $current -recurse|?{('.jpg' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
- for($i=0;$i -lt $files.length;$i++){
- $m=[regex]::match($files[$i].BaseName, '^[\u4e00-\u9fff]+');
- if($m.Success){
- for($j=0;$j -lt $rp.length;$j++){
- $kw=$rp[$j].split('=');
- if($m.groups[0].value -eq $kw[0]){
- $newname=$files[$i].BaseName.replace($kw[0], $kw[1])+$files[$i].Extension;
- $newfile=$files[$i].Directory.FullName.trimend('\')+'\'+$newname;
- write-host ($files[$i].FullName+' --> '+$newname);
- move-item -literal $files[$i].FullName $newfile -ErrorAction SilentlyContinue;
- break;
- }
- }
- }
- }
复制代码
作者: hxc1995 时间: 2024-8-7 15:38
回复 9# zaqmlp
太感谢了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |