在单张纸上批量打印多张图像

时间:2014-12-24 09:42:40

标签: html image batch-file printing multiple-columns

我在一个文件夹上放了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\""

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