我在一个文件夹上放了1000张图片&我想调整大小和每张打印12到24张图像。使用BATCH脚本从文件夹中收集图像,并输出一个包含3个列的HTML脚本。每页6行,在firefox中打开(缩小到适合和打印)。
如何在html脚本的每个图像上添加文件名,日期。
del "c:\zz.html"
setlocal EnableDelayedExpansion
set /a "p=1"
set /a "m=2"
set /a "w=4"
echo ^<table cellspacing="5" style="border:1px solid black;"^> >>"c:\zz.html"
for /f "delims=" %%i in ('dir /s/b /a-d f:\jpeg\mdl\*.jpg') do (
set /a "p=p+1"
echo !p!
if !p! == !m! (
set "bo=")
if !p! == !w! (
set "p=1"
set "bo=<tr>")
echo !bo!^<td^>^<img width=320 height=260 src="file:\\%%i"^> >>"c:\zz.html"
)
start C:\Program Files\Mozilla Firefox\firefox.exe "c:\zz.html" &exit
这是可用的代码
del "c:\zz.html"
setlocal EnableDelayedExpansion
set /a "p=1"
set /a "m=2"
set /a "w=4"
echo ^<table cellspacing="5" style="border:1px solid black;"^> >>"c:\zz.html"
for /f "delims=" %%i in ( 'dir /s/b /a-d %1\*.*' ) do (
echo %1
set /a "p=p+1"
echo !p!
if !p! == !m! (
set "bo=")
if !p! == !w! (
set "p=1"
set "bo=<tr>")
echo !bo!^<td^>^<img width=320 height=260 src="file:\\%%i"^>^<br^>%%~nxi >>"c:\zz.html"
)
start I:\HEVC\m-oz\m.f -no-remote -profile "I:\HEVC\m-ozy" "c:\zz.html" &exit
此注册表项提供右键单击以打印任何文件夹。 (根据需要更改源文件夹)
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\==jam==j]
@="Print===ALL=IN=1=="
[HKEY_CLASSES_ROOT\Directory\shell\==jam==j\Command]
@="I:\\s\\PPP_Print\\p.cmd \"%1\""
答案 0 :(得分:0)
我认识到您在启动项目时付出了一些努力,但您似乎需要很多帮助。感谢您分享您的进展。我想这让你值得圣诞礼物。 :)
我的问题有几个组件问题。
1。我想调整大小和每张打印12到24张图像。
选一个。你想要12或24吗?如果您希望数字根据您要打印的图像的高度而变化,那么您最好按照上面的建议调查Imagemagick。
2。使用BATCH脚本从文件夹中收集图像并输出一个包含3个字符串的HTML脚本。每页6行
3 * 6 = 18.让我们一起去吧。 8.5&#34; x11&#34;页面将处理超过900px的高度,因此将表格单元格的高度设置为150px。 (150 * 6 = 900。)
3。在firefox中打开(缩小到适合和打印)
您可以通过添加一些JavaScript来调用window.print();
来触发打印对话框。您仍然需要点击&#34;打印&#34;。
4。如何在html脚本上的每个图像上添加文件名,日期。
假设%%I
是分配用于捕获for
循环中文件名的变量。要获取文件的basename.ext
,请使用%%~nxI
。要获取文件的上次修改日期和时间,请使用%%~tI
。有关此语法的详细信息,请参阅控制台窗口中help for
的最后两页。
在文字和图片上使用CSS position: absolute
,在包含它们的position: relative
元素上使用td
。或者,或者您可以将图像作为背景图像加载,只在顶部显示内嵌文本。这要求您配置Firefox以打印可能未配置的背景图像。
要在页面上放置18个图像,一次循环浏览图像文件18,然后在找到第18个图像后生成HTML表格。在CSS中添加@media print
声明,以确保每个表在打印时触发分页符。要生成HTML,我建议您使用batch heredoc函数,使代码更易读,更易于维护。
@echo off
setlocal enabledelayedexpansion
:: thumbnails.bat
:: generates print layout of *.jpg in current folder
:: https://stackoverflow.com/a/27652107/1683264
set "htmlfile=out.html"
call :heredoc head >"%htmlfile%" && goto end_head
<^!doctype "html">
<html>
<head>
<style type="text/css">
a { text-decoration: none; }
img {
max-width: 200px;
max-height: 150px;
position: absolute;
left: 0px;
bottom: 0px;
}
td {
border: 1px solid black;
position: relative;
width: 200px;
height: 150px;
}
span {
position: absolute;
left: 5px;
top: 5px;
color: purple;
font-family: "Times New Roman";
font-size: 11px;
background: rgba(255, 255, 255, 0.6);
top: 3px;
left: 3px;
}
@media print {
table { page-break-after: always; }
}
</style>
<script type="text/javascript">
addEventListener('load', function() { window.print(); }, false);
</script>
</head>
<body>
:end_head
set count=1
set images=
for %%I in (*.jpg) do (
set images=!images! "%%~fI"
if !count! equ 18 (
call :build_table !images:~1!
set images=
set count=0
)
set /a count+=1
)
if %count% gtr 1 call :build_table !images:~1!
call :heredoc body >>"%htmlfile%" && goto end_body
</body>
</html>
:end_body
start "" "firefox" -new-tab "file:///%CD:\=/%/%htmlfile%"
:: End of main script
goto :EOF
:build_table <img1> <img2> ... <img18>
setlocal enabledelayedexpansion
set count=1
for %%I in (%*) do (
set "src=%%~I"
set "img!count!=<a href="file:///!src:\=/!"><img src="file:///!src:\=/!" />"
set "desc!count!=<span>%%~nxI<br />%%~tI</span></a>"
set /a count+=1
)
call :heredoc table >>"%htmlfile%" && goto end_table
<table cellspacing="5">
<tr>
<td>!img1!!desc1!</td>
<td>!img2!!desc2!</td>
<td>!img3!!desc3!</td>
</tr>
<tr>
<td>!img4!!desc4!</td>
<td>!img5!!desc5!</td>
<td>!img6!!desc6!</td>
</tr>
<tr>
<td>!img7!!desc7!</td>
<td>!img8!!desc8!</td>
<td>!img9!!desc9!</td>
</tr>
<tr>
<td>!img10!!desc10!</td>
<td>!img11!!desc11!</td>
<td>!img12!!desc12!</td>
</tr>
<tr>
<td>!img13!!desc13!</td>
<td>!img14!!desc14!</td>
<td>!img15!!desc15!</td>
</tr>
<tr>
<td>!img16!!desc16!</td>
<td>!img17!!desc17!</td>
<td>!img18!!desc18!</td>
</tr>
</table>
:end_table
endlocal
goto :EOF
:: https://stackoverflow.com/a/15032476/1683264
:heredoc <uniqueIDX>
setlocal enabledelayedexpansion
set go=
for /f "delims=" %%A in ('findstr /n "^" "%~f0"') do (
set "line=%%A" && set "line=!line:*:=!"
if defined go (if #!line:~1!==#!go::=! (goto :EOF) else echo(!line!)
if "!line:~0,13!"=="call :heredoc" (
for /f "tokens=3 delims=>^ " %%i in ("!line!") do (
if #%%i==#%1 (
for /f "tokens=2 delims=&" %%I in ("!line!") do (
for /f "tokens=2" %%x in ("%%I") do set "go=%%x"
)
)
)
)
)
goto :EOF