web-dev-qa-db-ja.com

画像のリストからPDFを作成します

Pythonを使用して、画像ファイルのリストからPDFを作成する実用的な方法はありますか?

Perlでは、 そのモジュール を知っています。それにより、PDFをわずか3行で作成できます。

use PDF::FromImage;
...
my $pdf = PDF::FromImage->new;
$pdf->load_images(@allPagesDir);
$pdf->write_file($bookName . '.pdf');

私はこれと非常に似た何かをする必要がありますが、Pythonで行います。 pyPdf モジュールは知っていますが、シンプルなものが欲しいです。

@ Edit

Googleからアクセスした場合は、次のコードをご覧ください。

from fpdf import FPDF
from PIL import Image
def makePdf(pdfFileName, listPages, dir = ''):
    if (dir):
        dir += "/"

    cover = Image.open(dir + str(listPages[0]) + ".jpg")
    width, height = cover.size

    pdf = FPDF(unit = "pt", format = [width, height])

    for page in listPages:
        pdf.add_page()
        pdf.image(dir + str(page) + ".jpg", 0, 0)

    pdf.output(dir + pdfFileName + ".pdf", "F")
47
Macabeus

インストール Python用FPDF

pip install fpdf

これで、同じロジックを使用できます。

from fpdf import FPDF
pdf = FPDF()
# imagelist is the list with all image filenames
for image in imagelist:
    pdf.add_page()
    pdf.image(image,x,y,w,h)
pdf.output("yourfile.pdf", "F")

詳細は チュートリアルページ または 公式ドキュメント をご覧ください。

49

Python 3を使用する場合、pythonモジュールを使用できます img2pdf

pip3 install img2pdfを使用してインストールすると、import img2pdfを使用してスクリプトで使用できます

サンプルコード

import os
import img2pdf

with open("output.pdf", "wb") as f:
    f.write(img2pdf.convert([i for i in os.listdir('path/to/imageDir') if i.endswith(".jpg")]))
20

複数の画像をPDFに変換する最良の方法は、これまで試してきましたが、PILを純粋に使用することです。非常にシンプルでありながら強力です。

from PIL import Image

im1 = Image.open("/Users/Apple/Desktop/bbd.jpg")
im2 = Image.open("/Users/Apple/Desktop/bbd1.jpg")
im3 = Image.open("/Users/Apple/Desktop/bbd2.jpg")
im_list = [im2,im3]

pdf1_filename = "/Users/Apple/Desktop/bbd1.pdf"

im1.save(pdf1_filename, "PDF" ,resolution=100.0, save_all=True, append_images=im_list)

save_allTrueに設定し、append_imagesを追加する画像のリストに設定するだけです。

AttributeError: 'JpegImageFile' object has no attribute 'encoderinfo'が発生する場合があります。解決策はこちら 複数のJPEGを複数ページのPDFとして保存中のエラー

注:最新のPILをインストールして、save_all引数がPDFで使用できることを確認します。

15
billphilip22

これはどう??

from fpdf import FPDF
from PIL import Image
import glob
import os


# set here
image_directory = '/path/to/imageDir'
extensions = ('*.jpg','*.png','*.gif') #add your image extentions
# set 0 if you want to fit pdf to image
# unit : pt
margin = 10

imagelist=[]
for ext in extensions:
    imagelist.extend(glob.glob(os.path.join(image_directory,ext)))

for imagePath in imagelist:
    cover = Image.open(imagePath)
    width, height = cover.size

pdf = FPDF(unit="pt", format=[width + 2*margin, height + 2*margin])
pdf.add_page()

pdf.image(imagePath, margin, margin)

destination = os.path.splitext(imagePath)[0]
pdf.output(destination + ".pdf", "F")
3
Daisuke Harada

pgmagick はPythonのGraphicsMagick(Magick++)バインディングです。

ImageMagick (または GraphicsMagick )のPythonラッパーです。

import os
from os import listdir
from os.path import isfile, join 
from pgmagick import Image

mypath = "\Images" # path to your Image directory 

for each_file in listdir(mypath):
    if isfile(join(mypath,each_file)):
        image_path = os.path.join(mypath,each_file)
        pdf_path =  os.path.join(mypath,each_file.rsplit('.', 1)[0]+'.pdf')
        img = Image(image_path)
        img.write(pdf_path)

Sample input Image:

enter image description here

PDF looks like this:

enter image description here

windows用のpgmagickのインストール手順:

1)プリコンパイルされたバイナリパッケージを Python拡張パッケージの非公式Windowsバイナリ (pgmagick Webページで説明)からダウンロードしてインストールします。

注:マシンにインストールされているpythonバージョンに対応する正しいバージョンと、32ビットインストールか64ビットかをダウンロードしてください。

端末でpythonと入力してEnterキーを押すだけで、32ビットまたは64ビットのpythonがあるかどうかを確認できます。

D:\>python
ActivePython 2.7.2.5 (ActiveState Software Inc.) based on
Python 2.7.2 (default, Jun 24 2011, 12:21:10) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.

したがって、python version 2.7とその32 bit (Intel)] on win32があるので、pgmagick‑0.5.8.win32‑py2.7.exeをダウンロードしてインストールする必要があります。

これらは、次の利用可能なPython拡張パッケージ pgmagick です。

  • pgmagick‑0.5.8.win‑AMD64‑py2.6.exe
  • pgmagick‑0.5.8.win‑AMD64‑py2.7.exe
  • pgmagick‑0.5.8.win‑AMD64‑py3.2.exe
  • pgmagick‑0.5.8.win32‑py2.6.exe
  • pgmagick‑0.5.8.win32‑py2.7.exe
  • pgmagick‑0.5.8.win32‑py3.2.exe

2)その後、 here からインストール手順に従うことができます。

pip install pgmagick

次に、インポートを試みます。

>>> from pgmagick import gminfo
>>> gminfo.version
'1.3.x'
>>> gminfo.library
'GraphicsMagick'
>>>
3
Tanveer Alam
**** Convert images files to pdf file.****
from os import listdir
from fpdf import FPDF

path = "/home/bunny/images/" # get the path of images

imagelist = listdir(path) # get list of all images

pdf = FPDF('P','mm','A4') # create an A4-size pdf document 

x,y,w,h = 0,0,200,250

for image in imagelist:

    pdf.add_page()
    pdf.image(path+image,x,y,w,h)

pdf.output("images.pdf","F")
2
user7384403

質問に答えられたことは知っていますが、これを解決するもう1つの方法は、枕ライブラリを使用することです。画像のディレクトリ全体を変換するには:

from PIL import Image
import os


def makePdf(imageDir, SaveToDir):
     '''
        imageDir: Directory of your images
        SaveToDir: Location Directory for your pdfs
    '''
    os.chdir(imageDir)
    try:
        for j in os.listdir(os.getcwd()):
            os.chdir(imageDir)
            fname, fext = os.path.splitext(j)
            newfilename = fname + ".pdf"
            im = Image.open(fname + fext)
            if im.mode == "RGBA":
                im = im.convert("RGB")
            os.chdir(SaveToDir)
            if not os.path.exists(newfilename):
                im.save(newfilename, "PDF", resolution=100.0)
    except Exception as e:
        print(e)

imageDir = r'____' # your imagedirectory path
SaveToDir = r'____' # diretory in which you want to save the pdfs
makePdf(imageDir, SaveToDir)

単一の画像で使用する場合:

From PIL import Image
import os

filename = r"/Desktop/document/dog.png"
im = Image.open(filename)
if im.mode == "RGBA":
    im = im.convert("RGB")
new_filename = r"/Desktop/document/dog.pdf"
if not os.path.exists(new_filename):
    im.save(new_filename,"PDF",resolution=100.0)
1
Vaibhav Singh

同じ問題があったので、1つのPDFで複数の画像を結合するpython関数を作成しました。コード( 私のgithubページ から入手でき、reportlabを使用し、次のリンクからの回答に基づいています:

画像をPDFに結合する方法の例を次に示します。

種類がpngとjpgの画像を含むフォルダー "D:\ pictures"があり、それらからpdf_with_pictures.pdfファイルを作成し、同じフォルダーに保存します。

outputPdfName = "pdf_with_pictures"
pathToSavePdfTo = "D:\\pictures"
pathToPictures = "D:\\pictures"
splitType = "none"
numberOfEntitiesInOnePdf = 1
listWithImagesExtensions = ["png", "jpg"]
picturesAreInRootFolder = True
nameOfPart = "volume"

unite_pictures_into_pdf(outputPdfName, pathToSavePdfTo, pathToPictures, splitType, numberOfEntitiesInOnePdf, listWithImagesExtensions, picturesAreInRootFolder, nameOfPart)
0
Valeriy Ivanov

ファイルがあるディレクトリからPDFを作成するためのいくつかの変更

コードを取得し、若干の変更を加えて、そのまま使用できるようにしました。

from fpdf import FPDF
from PIL import Image
import os # I added this and the code at the end

def makePdf(pdfFileName, listPages, dir=''):
    if (dir):
        dir += "/"

    cover = Image.open(dir + str(listPages[0]))
    width, height = cover.size

    pdf = FPDF(unit="pt", format=[width, height])

    for page in listPages:
        pdf.add_page()
        pdf.image(dir + str(page), 0, 0)

    pdf.output(dir + pdfFileName + ".pdf", "F")


# this is what I added
x = [f for f in os.listdir() if f.endswith(".jpg")]
y = len(x)

makePdf("file", x)
0
Giovanni Python