tugutugu
@tugutugu (tugu tugu)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Pythonでcsvからpdf出力したいと考えております。

解決したいこと

辞書内の同じキーを座標の違う場所に呼び出したい。

例)
Pythonでcsvからpdf出力したいと考えております。
解決方法を教えて下さい。

発生している問題・エラー

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。

import pandas as pd
import PyPDF2
from PyPDF2 import PdfFileWriter, PdfFileReader, PdfFileMerger
from reportlab.pdfgen import canvas



df = pd.read_csv(/)
template_file =.pdf
tmp_file=__tmp.pdf

d = {"お取引先名":[[30*mm, 280*mm ],[220*mm, 240*mm]],
"取引先ID": [[40*mm, 250*mm]],
"注文番号": [[40*mm, 245*mm]],
}

for index,data in df.iterrows():
  cv = canvas.Canvas(tmp_file)
  pdfmetrics.registerFont(TTFont('GenShinGothic', GEN_SHIN_GOTHIC_MEDIUM_TTF))
  font_size = 10
  cv.setFont('GenShinGothic', font_size)
  cv.setFillColorRGB(0, 0, 0)
  for position_index, position in d.items():
    for i, v in enumerate(position):
      x = v[0]
      y = v[1]
      cv.drawString(x, y, str(data[i]))
    cv.showPage()
    cv.save()

    template_pdf = PdfFileReader(template_file)
    template_page = template_pdf.getPage(0)

    tmp_pdf = PdfFileReader(tmp_file)
    template_page.mergePage(tmp_pdf.getPage(0))

    output = PdfFileWriter()
    output.addPage(template_page)
    output_file = "/out{}.pdf".format(index) 
    with open(output_file, "wb") as fp:
    output.write(fp)


実行して、pdfに出力してみると、全ての座標が取引先IDになります。
もしお分かりになる方がいらっしゃいましたらご教示いただけますと幸いです。
先にお礼を。ありがとう!

0

1Answer

ごめんなさい,positionsのデータ構造が辞書の入れ子になっていてOpenCVでPDF出力したいということまでは察したのですが,情報量が少なく改善案を提案できません.

0Like

Comments

  1. @tugutugu

    Questioner

    ご連絡ありがとうございます。情報を追加いたしました。pandasでcsvを読み込み、reportlabで出力したいと考えております!
  2. ありがとうございます.よりわかりやすくなりました.
    次の確認なのですが,dataの構造がおかしい可能性があります.
    dataのインデックス指定において,お取引先名を見るループではdataの0番目と1番目にアクセスするような2回のループになりますが,
    同じ名前が入ってそうなのにも関わらずdata[0]とdata[1]に順にアクセスするようになっています.
    もし可能でしたら,dataの構造を簡単にして示していただけると助かります.
    もしかしたら,data[i]ではなくdata[position_index]が正しいのではないでしょうか.
  3. @tugutugu

    Questioner

    ご連絡ありがとうございます。
    まず、やりたいこととしては辞書のキーを複数の座標に指定したいと考えております。
    二重配列が良いのかどのようなコードが良いか迷っているところです。
    アドバイスがあればご教示のほどよろしくお願い致します!
  4. @tugutugu

    Questioner


    もしかしたら,data[i]ではなくdata[position_index]が正しいのではないでしょうか.
    →こちらの方でした!ありがとうございますー!
  5. 解決されたようでよかったです!

Your answer might help someone💌