¥¼¥í¤«¤é¤Ï¤¸¤á¤ëGo¸À¸ì Âè16²ó Go¸À¸ì¤ÇPDF¤ÎÎμý½ñ¤Ë½ñ¤¹þ¤ß¤ò¤·¤Æ¤ß¤è¤¦(¸åÊÔ)
º£²ó¤ÏÁ°²ó¤Ë³¤Go¸À¸ì¤Î¥é¥¤¥Ö¥é¥êgopdf¤ò»È¤Ã¤ÆPDF¤ò°·¤¦ÊýË¡¤ò¾Ò²ð¤·¤Þ¤¹¡£Á°²ó¤Ï´ðËÜŪ¤Êgopdf¤Î»È¤¤Êý¤ò³Îǧ¤·¤Þ¤·¤¿¡£º£²ó¤Ï¤Ò¤Ê·Á¤ÎÎμý½ñPDF¤Ë¶â³Û¤ä°¸Ì¾¤ò½ñ¤¹þ¤ó¤ÇÎμý½ñ¤òưŪ¤ËÀ¸À®¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
¡ûºÇ½é¤Ë¿·µ¬¥×¥í¥¸¥§¥¯¥È¤òºîÀ®¤·¤è¤¦
Á°²ó¤Ï¡¢gopdf¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ´Êñ¤ÊPDF¤òºîÀ®¤¹¤ëÊýË¡¤ò³Îǧ¤·¤Þ¤·¤¿¡£Éü½¬¤ò¤³¤á¤Æ¡¢go1.16¤ËÂбþ¤·¤¿¥×¥í¥¸¥§¥¯¥È¤ÎÀ¸À®¤«¤é¥â¥¸¥å¡¼¥ë¤Î¥¤¥ó¥¹¥È¡¼¥ë¤Þ¤Çºî¶È¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
ºÇ½é¤ËŬÅö¤Ê¥Õ¥©¥ë¥À¤Ç¡¢¥³¥Þ¥ó¥É¥é¥¤¥ó(Windows¤Ê¤éPowerShell¡¢macOS¤Ê¤é¥¿¡¼¥ß¥Ê¥ë)¤ò³«¤¤¤Æ¡¢°Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Æ¿·µ¬¥â¥¸¥å¡¼¥ë¤òºîÀ®¤·¤Þ¤·¤ç¤¦¡¥º£²ó¤Ï¡¢writepdf¤È¤¤¤¦Ì¾Á°¤Ë¤·¤Æ¤ß¤Þ¤¹¡£
go mod init writepdf
¤¹¤ë¤È¡¢go.mod ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤¬ºîÀ®¤µ¤ì¤Þ¤¹¡£¤½¤·¤Æ¡¢¤³¤Î¥Õ¥¡¥¤¥ë¤ò¥Æ¥¥¹¥È¥Õ¥¡¥¤¥ë¤Ê¤É¤Ç³«¤¤¤Æ¡¢gopdf¤òÍøÍѤ¹¤ë»Ý(£²¹ÔÌܤΰì¹Ô)¤òÄɵ¤·¤Þ¤¹¡£
module writepdf
require github.com/signintech/gopdf v0.9.15
¤½¤Î¸å¡¢°Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Æ¡¢gopdf¥â¥¸¥å¡¼¥ë¤Î¥¤¥ó¥¹¥È¡¼¥ë¤ò¹Ô¤¤¤Þ¤¹¡£
go mod download github.com/signintech/gopdf
go mod tidy
¡û¥Õ¥©¥ó¥È¤ÈPDF¤Î¤Ò¤Ê·Á¤òÍÑ°Õ¤·¤è¤¦
¤½¤ì¤«¤é¡¢Á°²ó¤ÈƱ¤¸¤¯PDFºîÀ®¤ËÆüËܸì¥Õ¥©¥ó¥È¤ò»È¤¤¤Þ¤¹¡£IPAex¥Õ¥©¥ó¥È¤ÎIPAex¥´¥·¥Ã¥¯¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¥×¥í¥°¥é¥à¤ÈƱ¤¸¥Õ¥©¥ë¥À¤Ë¥³¥Ô¡¼¤·¤Æ¤ª¤¤Þ¤·¤ç¤¦¡£
¤Þ¤¿¡¢º£²ó¤ÏÎμý½ñ¤Î¤Ò¤Ê·Á¤È¤Ê¤ëPDF¤Ë½ñ¤¹þ¤ß¤ò¹Ô¤¤¤Þ¤¹¡£¤³¤³¤Ç¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ê¤Ò¤Ê·Á¤È¤Ê¤ëPDF¥Õ¥¡¥¤¥ë¡Ötemplate.pdf¡×¤òÍÑ°Õ¤·¤Þ¤·¤¿¡£¤³¤Á¤é¤«¤é¥À¥¦¥ó¥í¡¼¥É¤Ç¤¤Þ¤¹¡£¥À¥¦¥ó¥í¡¼¥É¤·¤¿¤é¡Ötemplate.pdf¡×¤òƱ¤¸¥Õ¥©¥ë¥À¤Ë¥³¥Ô¡¼¤·¤Þ¤·¤ç¤¦¡£
¤¹¤ë¤È¡¢¥Ç¥£¥ì¥¯¥È¥ê¤Î¥Õ¥¡¥¤¥ë¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
¡û¤Ò¤Ê·ÁPDF¤òÆɤ߹þ¤à¥×¥í¥°¥é¥à¤òºî¤í¤¦
¤½¤·¤Æ¡¢¤Þ¤º¤Ï¤Ò¤Ê·ÁPDF¤òÆɤ߹þ¤à¤À¤±¤Î¥×¥í¥°¥é¥à¤òºî¤ê¤Þ¤·¤ç¤¦¡£¤ä¤ê¤¿¤¤»ö¤È¤·¤Æ¤Ï¡¢¤Ò¤Ê·ÁPDF¤Ë¥Æ¥¥¹¥È¤ò½ñ¤¹þ¤à¤Î¤Ç¤¹¤¬¡¢¼ÂºÝ¤Î½èÍý¤È¤·¤Æ¤Ï¡¢¿·µ¬PDF¤òºîÀ®¤·¤Æ¤½¤³¤Ë´û¸¤ÎPDF¤òÆɤ߹þ¤ó¤Çɽ¼¨¤¹¤ë¤Î¤Ç¤¹¡£¤Ê¤ª¡¢¤Ò¤Ê·Á¤òÆɤ߹þ¤ó¤À¤À¤±¤À¤È¡¢¤Ò¤Ê·Á¤ÎPDF¤ÈƱ¤¸¤Ç¶èÊ̤¬ÉÕ¤¤Ë¤¯¤¤¤Î¤Ç¡¢º¸¾å¤«¤é±¦²¼¤Ë°ìËÜ·ÓÀþ¤òÆþ¤ì¤Æ¡¢¤Ò¤Ê·Á¤ò°Û¤Ê¤ë¤³¤È¤ò¼¨¤·¤Þ¤·¤¿¡£
°Ê²¼¤Î¤è¤¦¤Ê¡Öwritepdf.go¡×¤È¤¤¤¦¥×¥í¥°¥é¥à¤òºîÀ®¤·¤Þ¤¹¡£
package main
import (
"github.com/signintech/gopdf"
)
func main() {
// gopdf ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ® --- (*1)
pdf := gopdf.GoPdf{}
// ¤Ò¤Ê·Á¤Ë¹ç¤ï¤»¤ÆÍÑ»æ¤Ï²£¸þ¤¤ÎA4¤È¤¹¤ë --- (*2)
A4 := *gopdf.PageSizeA4
A4Yoko := gopdf.Rect{W: A4.H, H: A4.W}
pdf.Start(gopdf.Config{PageSize: A4Yoko})
pdf.AddPage()
// ¥Æ¥ó¥×¥ì¡¼¥È¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥Ý¡¼¥È --- (*3)
template := pdf.ImportPage("./template.pdf", 1, "/MediaBox")
// ¥¤¥ó¥Ý¡¼¥È¤·¤¿PDF¤òPDF¤ÇŬÍѤ¹¤ë --- (*4)
pageH := 1080 * (A4Yoko.W / 1920) // ¥Æ¥ó¥×¥ì¡¼¥È¥µ¥¤¥º (1920x1080)
pdf.UseImportedTemplate(template, 0, 0, A4Yoko.W, pageH)
// ŬÅö¤ËÀþ¤òÆþ¤ì¤ë
pdf.Line(0, 0, A4Yoko.W, A4Yoko.H)
// PDF¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤¹ --- (*5)
pdf.WritePdf("ryosyusyo.pdf")
}
³¤¤¤Æ°Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Þ¤·¤ç¤¦¡£¤¹¤ë¤È¡¢¡Öryosyusyo.pdf¡×¤È¤¤¤¦PDF¤¬À¸À®¤µ¤ì¤Þ¤¹¡£
go run .
À¸À®¤µ¤ì¤¿PDF¤ò³«¤¯¤È¼¡¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¥×¥í¥°¥é¥à¤ò³Îǧ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£(¡ö1)¤ÎÉôʬ¤Ç¤Ïgopdf¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¤Þ¤¹¡£¤½¤·¤Æ¡¢(¡ö2)¤Ç¤ÏÍÑ»æÀßÄê¤ò¹Ô¤¤¤Þ¤¹¡£¤³¤³¤Ç¤Ï¡¢²£¸þ¤¤ÎA4¤Ë¤·¤¿¤¤¤Î¤Ç¤¹¤¬¡¢Íѻ極¥¤¥º¤Ï½Ä¸þ¤¤·¤«ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç¡¢´º¤¨¤ÆA4Yoko¤È¤¤¤¦Íѻ極¥¤¥º¤òÄêµÁ¤·¤Þ¤·¤¿¡£
¤½¤·¤Æ¡¢(¡ö3)¤Ç¤Ï¤Ò¤Ê·Á¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥Ý¡¼¥È¤·¤Þ¤¹¡£ImportPage¥á¥½¥Ã¥É¤ò»È¤Ã¤Æ¼è¤ê¹þ¤ß¤Þ¤¹¡£¤Ê¤ª¡¢¤É¤ó¤Ê·Á¼°¤ÎPDF¤Ç¤â¼è¤ê¹þ¤á¤ë¤È¤¤¤¦Ìõ¤Ç¤Ï¤Ê¤¤¤è¤¦¤Ç¤¹¡£´ðËÜŪ¤ÊPDF¤Ï¼è¤ê¹þ¤á¤ë¤è¤¦¤Ç¤¹¤¬Æɤá¤Ê¤¤¤³¤È¤â¤¢¤ë¤è¤¦¤Ç¤¹¡£¤½¤Î¾ì¹ç¤Ï¡¢Ê̤Υġ¼¥ë¤ò»È¤Ã¤ÆPDF¤Î·Á¼°¤òñ½ã¤Ê¤â¤Î¤ËÊÑ´¹¤·¤¿¤ê¡¢¤¢¤ë¤¤¤Ï¡¢²èÁü¤ËÊÑ´¹¤·¤¿¤ê¤¹¤ë¤³¤È¤Ç²óÈò¤Ç¤¤Þ¤¹¡£
¤È¤³¤í¤Ç¡¢¥¤¥ó¥Ý¡¼¥È¤·¤¿PDF¤Ï¡¢¼ÂºÝ¤ËÇÛÃÖ¤·¤Æ¤Ï¤¸¤á¤Æ¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£(¡ö4)¤ÎUseImportedTemplate¥á¥½¥Ã¥É¤ò»È¤Ã¤Æ¥Ú¡¼¥¸¤ËÇÛÃÖ¤·¤Þ¤¹¡£¤³¤Î¤È¤¡¢ÇÛÃÖ¤¹¤ëºÂɸ¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤³¤³¤Ç¤Ï¿·µ¬PDF¤Ë¤Ô¤Ã¤¿¤êÇÛÃÖ¤·¤Þ¤¹¡£¤½¤ÎºÝ¡¢½Ä²£È椬Êø¤ì¤Ê¤¤¤è¤¦¤Ë¥µ¥¤¥º¤ò·×»»¤·¤ÆŽ¤êÉÕ¤±¤Þ¤·¤ç¤¦¡£¤³¤³¤Ç¤Ò¤Ê·Á¤È¤·¤ÆÍÑ°Õ¤·¤¿PDF¤Ï1920¡ß1080¥Ý¥¤¥ó¥È¤Ç¤·¤¿¡£¤½¤Î¤¿¤á¡¢¤³¤ì¤òA4²£¥µ¥¤¥º¤Ë¼ý¤Þ¤ë¤è¤¦¤Ë¥µ¥¤¥º¤ò·×»»¤·¤Þ¤·¤¿¡£¤½¤·¤Æ¡¢ºÇ¸å(¡ö5)¤ÇPDF¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤¹¡£
¡ûǤ°Õ¤Î¥Æ¥¥¹¥È¤òº¹¤·¹þ¤â¤¦
PDF¤Î¤Ò¤Ê·Á¤òÆɤ߹þ¤ó¤À¤é¡¢¸å¤Ï¥Æ¥¥¹¥È¤òº¹¤·¹þ¤à¤è¤¦¤Ê¥×¥í¥°¥é¥à¤òºî¤ë¤À¤±¤Ç¤¹¡£¤È¤Ï¸À¤¨¡¢¥Æ¥¥¹¥È¤ò¤Ô¤Ã¤¿¤êº¹¤·¹þ¤ß¤¿¤¤ºÂɸ¤òÄ´¤Ù¤ë¤Î¤â´Êñ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤½¤³¤Ç¡¢10pt¤´¤È¤Ë·ÓÀþ¤ò°ú¤¤¤Æ¤À¤¤¤¿¤¤¤Î°ÌÃÖ¤òµá¤á¤é¤ì¤ë¤è¤¦¤Ë¤·¤Þ¤·¤ç¤¦¡£¤½¤Î¾å¤Ç¥Æ¥¥¹¥È¤òº¹¤·¹þ¤ß¤Þ¤¹¡£
Ʊ¤¸¤¯¡Öwritepdf.go¡×¤ò¼¡¤Î¤è¤¦¤Ë½ñ¤´¹¤¨¤Þ¤·¤ç¤¦¡£
package main
import (
"github.com/signintech/gopdf"
)
func main() {
// gopdf ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ® --- (*1)
pdf := gopdf.GoPdf{}
// ¤Ò¤Ê·Á¤Ë¹ç¤ï¤»¤ÆÍÑ»æ¤Ï²£¸þ¤¤ÎA4¤È¤¹¤ë
A4 := *gopdf.PageSizeA4
A4Yoko := gopdf.Rect{W: A4.H, H: A4.W}
pdf.Start(gopdf.Config{PageSize: A4Yoko})
pdf.AddPage()
// ¥Æ¥ó¥×¥ì¡¼¥È¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥Ý¡¼¥È --- (*2)
template := pdf.ImportPage("./template.pdf", 1, "/MediaBox")
pageH := 1080 * (A4Yoko.W / 1920)
pdf.UseImportedTemplate(template, 0, 0, A4Yoko.W, pageH)
// ¥°¥ê¥Ã¥ÉÀþ¤òÆþ¤ì¤ë --- (*3)
drawGrid(&pdf, &A4Yoko)
// TTF¥Õ¥©¥ó¥È¤ò¼è¤ê¹þ¤à --- (*4)
err := pdf.AddTTFFont("ipaexg", "./ipaexg.ttf")
if err != nil {
panic(err)
}
//¡¡Ê¸»ú¤ò½ñ¤¹þ¤à --- (*5)
// °¸Ì¾
pdf.SetFont("ipaexg", "", 28)
drawText(&pdf, 300, 140, "»³ÅÄ ÂÀϺ")
// ÆüÉÕ
pdf.SetFont("ipaexg", "", 15)
drawText(&pdf, 600, 100, "3") // ǯ
drawText(&pdf, 635, 100, "10") // ·î
drawText(&pdf, 676, 100, "15") // Æü
// ¶â³Û
pdf.SetFont("ipaexg", "", 28)
drawText(&pdf, 280, 200, "¡ï 15,800 -")
// PDF¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤¹ --- (*6)
pdf.WritePdf("ryosyusyo.pdf")
}
func drawText(pdf *gopdf.GoPdf, x float64, y float64, s string) {
pdf.SetX(x)
pdf.SetY(y)
pdf.Cell(nil, s)
}
func drawGrid(pdf *gopdf.GoPdf, page *gopdf.Rect) {
ww := 10.0
for i := 1; i < int(page.W/ww); i++ {
if i%10 == 0 {
pdf.SetLineWidth(0.8)
pdf.SetStrokeColor(50, 50, 100)
} else {
pdf.SetLineWidth(0.3)
pdf.SetStrokeColor(100, 100, 130)
}
x, y := float64(i)*ww, float64(i)*ww
pdf.Line(x, 0, x, page.H)
pdf.Line(0, y, page.W, y)
}
}
Ʊ¤¸¤¯¡Ögo run .¡×¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤È¡¢¡Öryosyusyo.pdf¡×¤¬À¸À®¤µ¤ì¤Þ¤¹¡£¤³¤ì¤ò³«¤¯¤È¼¡¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£10pt¤º¤Ä¤Ë·ÓÀþ¤¬°ú¤«¤ì¤ë¤Î¤Ç¡¢¥Æ¥¥¹¥È¤òº¹¤·¹þ¤àºÂɸ¤¬Ê¬¤«¤ê¤ä¤¹¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¥×¥í¥°¥é¥à¤ò³Îǧ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£(¡ö1)¤ÎÉôʬ¤Ç¤ÏA4²£¥µ¥¤¥º¤Çgopdf¤ò¥»¥Ã¥È¥¢¥Ã¥×¤·¤Þ¤¹¡£¤½¤·¤Æ¡¢(¡ö2)¤Ç¤Ò¤Ê·ÁPDF¤ò¼è¤ê¹þ¤ß¤Þ¤¹¡£(¡ö3)¤ÎÉôʬ¡¢¤ª¤è¤Ó¥×¥í¥°¥é¥àËöÈø¤ÎdrawGrid´Ø¿ô¤Ç10pt¤´¤È¤Ë¥°¥ê¥Ã¥ÉÀþ¤òÉÁ²è¤·¤Þ¤¹¡£
¤½¤·¤Æ¡¢(¡ö4)¤ÎÉôʬ¤Ç¤ÏTTF¥Õ¥©¥ó¥È¤ò¼è¤ê¹þ¤ß¡Öipaexg¡×¤È¤¤¤¦Ì¾Á°¤ÇÍøÍѤǤ¤ë¤è¤¦¤Ë»ØÄꤷ¤Þ¤¹¡£(¡ö5)°Ê¹ß¤ÎÉôʬ¤Ç°¸Ì¾¤äÆüÉÕ¡¢¶â³Û¤ò½ñ¤¹þ¤ß¤Þ¤¹¡£ºÇ¸å(¡ö6)¤ÇPDF¤ò½ñ¤½Ð¤·¤Þ¤¹¡£
¡û¥°¥ê¥Ã¥ÉÀþ¤ò¾Ã¤·¤Æ´°À®
¤³¤Î¤è¤¦¤Ë¤·¤Æ¡¢¥Æ¥¥¹¥È¤Î°ÌÃÖ¤òÄ´À°¤·¤¿¤é¡¢¥×¥í¥°¥é¥à¤Î(¡ö3)¤Ëµ½Ò¤·¤¿drawGrid´Ø¿ô¤Î¸Æ½Ð¤ò¾Ã¤·¤Þ¤¹¡£
¤¢¤È¤Ï¡¢CSV¥Õ¥¡¥¤¥ë¤Ê¤É¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤ó¤ÇPDF¤òÀ¸À®¤¹¤ë¤è¤¦¤Ê½èÍý¤ò½ñ¤²Ã¤¨¤ì¤Ð¡¢Î©ÇɤÊÎμý½ñÀ¸À®¥Ä¡¼¥ë¤Î´°À®¤¹¤ë¤Ç¤·¤ç¤¦¡£
¡û¤Þ¤È¤á
°Ê¾å¡¢Á°²ó¤Èº£²ó¤ÇPDF¤ò°·¤¦¥×¥í¥°¥é¥à¤òºî¤Ã¤Æ¤ß¤Þ¤·¤¿¡£¤³¤³¤Ç¸«¤¿¤È¤ª¤êgopdf¤ÏɬÍפʵ¡Ç½¤òÌÖÍ夷¤Æ¤¤¤Ê¤¬¤é¤â¡¢¥·¥ó¥×¥ë¤Ç»È¤¤¾¡¼ê¤¬Îɤ¤¤È´¶¤¸¤Þ¤·¤¿¡£
Go¸À¸ì¤Çºî¤Ã¤Æ¤ª¤±¤ÐÇÛÉÛ¤â´Êñ¤Ê¤Î¤¬Îɤ¤ÅÀ¤Ç¤¹¡£¤Ê¤ªGo¸À¸ì1.16¤Ç¤ÏÇÛÉÛ¤¹¤ë¥Ð¥¤¥Ê¥ê¤Ë¥×¥í¥°¥é¥à¤ÇÍøÍѤ¹¤ë¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤âźÉդǤ¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¤³¤Î»ÅÁȤߤò»È¤¨¤Ð¥Õ¥©¥ó¥È¥Õ¥¡¥¤¥ë¤ä¤Ò¤Ê·Á¥Õ¥¡¥¤¥ë¤â¼Â¹Ô¥Õ¥¡¥¤¥ë¤Ë´Þ¤á¤é¤ì¤Þ¤¹¡£ÇÛÉÛ¤¬¤è¤êÊØÍø¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£
¼«Í³·¿¥×¥í¥°¥é¥Þ¡¼¡£¤¯¤¸¤é¤Ï¤ó¤É¤Ë¤Æ¡¢¥×¥í¥°¥é¥ß¥ó¥°¤Î³Ú¤·¤µ¤òÅÁ¤¨¤ë³èÆ°¤ò¤·¤Æ¤¤¤ë¡£Âåɽºî¤Ë¡¢ÆüËܸì¥×¥í¥°¥é¥ß¥ó¥°¸À¸ì¡Ö¤Ê¤Ç¤·¤³¡× ¡¢¥Æ¥¥¹¥È²»³Ú¡Ö¥µ¥¯¥é¡×¤Ê¤É¡£2001ǯ¥ª¥ó¥é¥¤¥ó¥½¥Õ¥ÈÂç¾ÞÆþ¾Þ¡¢2004ǯÅṲ̀Ƨ¥æ¡¼¥¹ ¥¹¡¼¥Ñ¡¼¥¯¥ê¥¨¡¼¥¿Ç§Äê¡¢2010ǯ OSS¹×¸¥¼Ô¾Ï¼õ¾Þ¡£µ»½Ñ½ñ¤â¿¤¯¼¹É®¤·¤Æ¤¤¤ë¡£Ä¾¶á¤Ç¤Ï¡¢¡Ö¥·¥´¥È¤¬¤Ï¤«¤É¤ë Python¼«Æ°½èÍý¤Î¶µ²Ê½ñ(¥Þ¥¤¥Ê¥Ó½ÐÈÇ)¡×¡Ö¤¹¤°¤Ë»È¤¨¤ë!¶È̳¤Ç¼ÂÁ©¤Ç¤¤ë! Python¤Ë¤è¤ëAI¡¦µ¡³£³Ø½¬¡¦¿¼Áسؽ¬¥¢¥×¥ê¤Î¤Ä¤¯¤êÊý TensorFlow2Âбþ(¥½¥·¥à)¡×¡Ö¥Þ¥ó¥¬¤Ç¤¶¤Ã¤¯¤ê³Ø¤ÖPython(¥Þ¥¤¥Ê¥Ó½ÐÈÇ)¡×¤Ê¤É¡£
¡ûºÇ½é¤Ë¿·µ¬¥×¥í¥¸¥§¥¯¥È¤òºîÀ®¤·¤è¤¦
Á°²ó¤Ï¡¢gopdf¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ´Êñ¤ÊPDF¤òºîÀ®¤¹¤ëÊýË¡¤ò³Îǧ¤·¤Þ¤·¤¿¡£Éü½¬¤ò¤³¤á¤Æ¡¢go1.16¤ËÂбþ¤·¤¿¥×¥í¥¸¥§¥¯¥È¤ÎÀ¸À®¤«¤é¥â¥¸¥å¡¼¥ë¤Î¥¤¥ó¥¹¥È¡¼¥ë¤Þ¤Çºî¶È¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
go mod init writepdf
¤¹¤ë¤È¡¢go.mod ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤¬ºîÀ®¤µ¤ì¤Þ¤¹¡£¤½¤·¤Æ¡¢¤³¤Î¥Õ¥¡¥¤¥ë¤ò¥Æ¥¥¹¥È¥Õ¥¡¥¤¥ë¤Ê¤É¤Ç³«¤¤¤Æ¡¢gopdf¤òÍøÍѤ¹¤ë»Ý(£²¹ÔÌܤΰì¹Ô)¤òÄɵ¤·¤Þ¤¹¡£
module writepdf
require github.com/signintech/gopdf v0.9.15
¤½¤Î¸å¡¢°Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Æ¡¢gopdf¥â¥¸¥å¡¼¥ë¤Î¥¤¥ó¥¹¥È¡¼¥ë¤ò¹Ô¤¤¤Þ¤¹¡£
go mod download github.com/signintech/gopdf
go mod tidy
¡û¥Õ¥©¥ó¥È¤ÈPDF¤Î¤Ò¤Ê·Á¤òÍÑ°Õ¤·¤è¤¦
¤½¤ì¤«¤é¡¢Á°²ó¤ÈƱ¤¸¤¯PDFºîÀ®¤ËÆüËܸì¥Õ¥©¥ó¥È¤ò»È¤¤¤Þ¤¹¡£IPAex¥Õ¥©¥ó¥È¤ÎIPAex¥´¥·¥Ã¥¯¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¥×¥í¥°¥é¥à¤ÈƱ¤¸¥Õ¥©¥ë¥À¤Ë¥³¥Ô¡¼¤·¤Æ¤ª¤¤Þ¤·¤ç¤¦¡£
¤Þ¤¿¡¢º£²ó¤ÏÎμý½ñ¤Î¤Ò¤Ê·Á¤È¤Ê¤ëPDF¤Ë½ñ¤¹þ¤ß¤ò¹Ô¤¤¤Þ¤¹¡£¤³¤³¤Ç¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ê¤Ò¤Ê·Á¤È¤Ê¤ëPDF¥Õ¥¡¥¤¥ë¡Ötemplate.pdf¡×¤òÍÑ°Õ¤·¤Þ¤·¤¿¡£¤³¤Á¤é¤«¤é¥À¥¦¥ó¥í¡¼¥É¤Ç¤¤Þ¤¹¡£¥À¥¦¥ó¥í¡¼¥É¤·¤¿¤é¡Ötemplate.pdf¡×¤òƱ¤¸¥Õ¥©¥ë¥À¤Ë¥³¥Ô¡¼¤·¤Þ¤·¤ç¤¦¡£
¤¹¤ë¤È¡¢¥Ç¥£¥ì¥¯¥È¥ê¤Î¥Õ¥¡¥¤¥ë¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
¡û¤Ò¤Ê·ÁPDF¤òÆɤ߹þ¤à¥×¥í¥°¥é¥à¤òºî¤í¤¦
¤½¤·¤Æ¡¢¤Þ¤º¤Ï¤Ò¤Ê·ÁPDF¤òÆɤ߹þ¤à¤À¤±¤Î¥×¥í¥°¥é¥à¤òºî¤ê¤Þ¤·¤ç¤¦¡£¤ä¤ê¤¿¤¤»ö¤È¤·¤Æ¤Ï¡¢¤Ò¤Ê·ÁPDF¤Ë¥Æ¥¥¹¥È¤ò½ñ¤¹þ¤à¤Î¤Ç¤¹¤¬¡¢¼ÂºÝ¤Î½èÍý¤È¤·¤Æ¤Ï¡¢¿·µ¬PDF¤òºîÀ®¤·¤Æ¤½¤³¤Ë´û¸¤ÎPDF¤òÆɤ߹þ¤ó¤Çɽ¼¨¤¹¤ë¤Î¤Ç¤¹¡£¤Ê¤ª¡¢¤Ò¤Ê·Á¤òÆɤ߹þ¤ó¤À¤À¤±¤À¤È¡¢¤Ò¤Ê·Á¤ÎPDF¤ÈƱ¤¸¤Ç¶èÊ̤¬ÉÕ¤¤Ë¤¯¤¤¤Î¤Ç¡¢º¸¾å¤«¤é±¦²¼¤Ë°ìËÜ·ÓÀþ¤òÆþ¤ì¤Æ¡¢¤Ò¤Ê·Á¤ò°Û¤Ê¤ë¤³¤È¤ò¼¨¤·¤Þ¤·¤¿¡£
°Ê²¼¤Î¤è¤¦¤Ê¡Öwritepdf.go¡×¤È¤¤¤¦¥×¥í¥°¥é¥à¤òºîÀ®¤·¤Þ¤¹¡£
package main
import (
"github.com/signintech/gopdf"
)
func main() {
// gopdf ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ® --- (*1)
pdf := gopdf.GoPdf{}
// ¤Ò¤Ê·Á¤Ë¹ç¤ï¤»¤ÆÍÑ»æ¤Ï²£¸þ¤¤ÎA4¤È¤¹¤ë --- (*2)
A4 := *gopdf.PageSizeA4
A4Yoko := gopdf.Rect{W: A4.H, H: A4.W}
pdf.Start(gopdf.Config{PageSize: A4Yoko})
pdf.AddPage()
// ¥Æ¥ó¥×¥ì¡¼¥È¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥Ý¡¼¥È --- (*3)
template := pdf.ImportPage("./template.pdf", 1, "/MediaBox")
// ¥¤¥ó¥Ý¡¼¥È¤·¤¿PDF¤òPDF¤ÇŬÍѤ¹¤ë --- (*4)
pageH := 1080 * (A4Yoko.W / 1920) // ¥Æ¥ó¥×¥ì¡¼¥È¥µ¥¤¥º (1920x1080)
pdf.UseImportedTemplate(template, 0, 0, A4Yoko.W, pageH)
// ŬÅö¤ËÀþ¤òÆþ¤ì¤ë
pdf.Line(0, 0, A4Yoko.W, A4Yoko.H)
// PDF¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤¹ --- (*5)
pdf.WritePdf("ryosyusyo.pdf")
}
³¤¤¤Æ°Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Þ¤·¤ç¤¦¡£¤¹¤ë¤È¡¢¡Öryosyusyo.pdf¡×¤È¤¤¤¦PDF¤¬À¸À®¤µ¤ì¤Þ¤¹¡£
go run .
À¸À®¤µ¤ì¤¿PDF¤ò³«¤¯¤È¼¡¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¥×¥í¥°¥é¥à¤ò³Îǧ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£(¡ö1)¤ÎÉôʬ¤Ç¤Ïgopdf¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¤Þ¤¹¡£¤½¤·¤Æ¡¢(¡ö2)¤Ç¤ÏÍÑ»æÀßÄê¤ò¹Ô¤¤¤Þ¤¹¡£¤³¤³¤Ç¤Ï¡¢²£¸þ¤¤ÎA4¤Ë¤·¤¿¤¤¤Î¤Ç¤¹¤¬¡¢Íѻ極¥¤¥º¤Ï½Ä¸þ¤¤·¤«ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç¡¢´º¤¨¤ÆA4Yoko¤È¤¤¤¦Íѻ極¥¤¥º¤òÄêµÁ¤·¤Þ¤·¤¿¡£
¤½¤·¤Æ¡¢(¡ö3)¤Ç¤Ï¤Ò¤Ê·Á¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥Ý¡¼¥È¤·¤Þ¤¹¡£ImportPage¥á¥½¥Ã¥É¤ò»È¤Ã¤Æ¼è¤ê¹þ¤ß¤Þ¤¹¡£¤Ê¤ª¡¢¤É¤ó¤Ê·Á¼°¤ÎPDF¤Ç¤â¼è¤ê¹þ¤á¤ë¤È¤¤¤¦Ìõ¤Ç¤Ï¤Ê¤¤¤è¤¦¤Ç¤¹¡£´ðËÜŪ¤ÊPDF¤Ï¼è¤ê¹þ¤á¤ë¤è¤¦¤Ç¤¹¤¬Æɤá¤Ê¤¤¤³¤È¤â¤¢¤ë¤è¤¦¤Ç¤¹¡£¤½¤Î¾ì¹ç¤Ï¡¢Ê̤Υġ¼¥ë¤ò»È¤Ã¤ÆPDF¤Î·Á¼°¤òñ½ã¤Ê¤â¤Î¤ËÊÑ´¹¤·¤¿¤ê¡¢¤¢¤ë¤¤¤Ï¡¢²èÁü¤ËÊÑ´¹¤·¤¿¤ê¤¹¤ë¤³¤È¤Ç²óÈò¤Ç¤¤Þ¤¹¡£
¤È¤³¤í¤Ç¡¢¥¤¥ó¥Ý¡¼¥È¤·¤¿PDF¤Ï¡¢¼ÂºÝ¤ËÇÛÃÖ¤·¤Æ¤Ï¤¸¤á¤Æ¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£(¡ö4)¤ÎUseImportedTemplate¥á¥½¥Ã¥É¤ò»È¤Ã¤Æ¥Ú¡¼¥¸¤ËÇÛÃÖ¤·¤Þ¤¹¡£¤³¤Î¤È¤¡¢ÇÛÃÖ¤¹¤ëºÂɸ¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤³¤³¤Ç¤Ï¿·µ¬PDF¤Ë¤Ô¤Ã¤¿¤êÇÛÃÖ¤·¤Þ¤¹¡£¤½¤ÎºÝ¡¢½Ä²£È椬Êø¤ì¤Ê¤¤¤è¤¦¤Ë¥µ¥¤¥º¤ò·×»»¤·¤ÆŽ¤êÉÕ¤±¤Þ¤·¤ç¤¦¡£¤³¤³¤Ç¤Ò¤Ê·Á¤È¤·¤ÆÍÑ°Õ¤·¤¿PDF¤Ï1920¡ß1080¥Ý¥¤¥ó¥È¤Ç¤·¤¿¡£¤½¤Î¤¿¤á¡¢¤³¤ì¤òA4²£¥µ¥¤¥º¤Ë¼ý¤Þ¤ë¤è¤¦¤Ë¥µ¥¤¥º¤ò·×»»¤·¤Þ¤·¤¿¡£¤½¤·¤Æ¡¢ºÇ¸å(¡ö5)¤ÇPDF¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤¹¡£
¡ûǤ°Õ¤Î¥Æ¥¥¹¥È¤òº¹¤·¹þ¤â¤¦
PDF¤Î¤Ò¤Ê·Á¤òÆɤ߹þ¤ó¤À¤é¡¢¸å¤Ï¥Æ¥¥¹¥È¤òº¹¤·¹þ¤à¤è¤¦¤Ê¥×¥í¥°¥é¥à¤òºî¤ë¤À¤±¤Ç¤¹¡£¤È¤Ï¸À¤¨¡¢¥Æ¥¥¹¥È¤ò¤Ô¤Ã¤¿¤êº¹¤·¹þ¤ß¤¿¤¤ºÂɸ¤òÄ´¤Ù¤ë¤Î¤â´Êñ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤½¤³¤Ç¡¢10pt¤´¤È¤Ë·ÓÀþ¤ò°ú¤¤¤Æ¤À¤¤¤¿¤¤¤Î°ÌÃÖ¤òµá¤á¤é¤ì¤ë¤è¤¦¤Ë¤·¤Þ¤·¤ç¤¦¡£¤½¤Î¾å¤Ç¥Æ¥¥¹¥È¤òº¹¤·¹þ¤ß¤Þ¤¹¡£
Ʊ¤¸¤¯¡Öwritepdf.go¡×¤ò¼¡¤Î¤è¤¦¤Ë½ñ¤´¹¤¨¤Þ¤·¤ç¤¦¡£
package main
import (
"github.com/signintech/gopdf"
)
func main() {
// gopdf ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ® --- (*1)
pdf := gopdf.GoPdf{}
// ¤Ò¤Ê·Á¤Ë¹ç¤ï¤»¤ÆÍÑ»æ¤Ï²£¸þ¤¤ÎA4¤È¤¹¤ë
A4 := *gopdf.PageSizeA4
A4Yoko := gopdf.Rect{W: A4.H, H: A4.W}
pdf.Start(gopdf.Config{PageSize: A4Yoko})
pdf.AddPage()
// ¥Æ¥ó¥×¥ì¡¼¥È¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥Ý¡¼¥È --- (*2)
template := pdf.ImportPage("./template.pdf", 1, "/MediaBox")
pageH := 1080 * (A4Yoko.W / 1920)
pdf.UseImportedTemplate(template, 0, 0, A4Yoko.W, pageH)
// ¥°¥ê¥Ã¥ÉÀþ¤òÆþ¤ì¤ë --- (*3)
drawGrid(&pdf, &A4Yoko)
// TTF¥Õ¥©¥ó¥È¤ò¼è¤ê¹þ¤à --- (*4)
err := pdf.AddTTFFont("ipaexg", "./ipaexg.ttf")
if err != nil {
panic(err)
}
//¡¡Ê¸»ú¤ò½ñ¤¹þ¤à --- (*5)
// °¸Ì¾
pdf.SetFont("ipaexg", "", 28)
drawText(&pdf, 300, 140, "»³ÅÄ ÂÀϺ")
// ÆüÉÕ
pdf.SetFont("ipaexg", "", 15)
drawText(&pdf, 600, 100, "3") // ǯ
drawText(&pdf, 635, 100, "10") // ·î
drawText(&pdf, 676, 100, "15") // Æü
// ¶â³Û
pdf.SetFont("ipaexg", "", 28)
drawText(&pdf, 280, 200, "¡ï 15,800 -")
// PDF¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤¹ --- (*6)
pdf.WritePdf("ryosyusyo.pdf")
}
func drawText(pdf *gopdf.GoPdf, x float64, y float64, s string) {
pdf.SetX(x)
pdf.SetY(y)
pdf.Cell(nil, s)
}
func drawGrid(pdf *gopdf.GoPdf, page *gopdf.Rect) {
ww := 10.0
for i := 1; i < int(page.W/ww); i++ {
if i%10 == 0 {
pdf.SetLineWidth(0.8)
pdf.SetStrokeColor(50, 50, 100)
} else {
pdf.SetLineWidth(0.3)
pdf.SetStrokeColor(100, 100, 130)
}
x, y := float64(i)*ww, float64(i)*ww
pdf.Line(x, 0, x, page.H)
pdf.Line(0, y, page.W, y)
}
}
Ʊ¤¸¤¯¡Ögo run .¡×¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤È¡¢¡Öryosyusyo.pdf¡×¤¬À¸À®¤µ¤ì¤Þ¤¹¡£¤³¤ì¤ò³«¤¯¤È¼¡¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£10pt¤º¤Ä¤Ë·ÓÀþ¤¬°ú¤«¤ì¤ë¤Î¤Ç¡¢¥Æ¥¥¹¥È¤òº¹¤·¹þ¤àºÂɸ¤¬Ê¬¤«¤ê¤ä¤¹¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¥×¥í¥°¥é¥à¤ò³Îǧ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£(¡ö1)¤ÎÉôʬ¤Ç¤ÏA4²£¥µ¥¤¥º¤Çgopdf¤ò¥»¥Ã¥È¥¢¥Ã¥×¤·¤Þ¤¹¡£¤½¤·¤Æ¡¢(¡ö2)¤Ç¤Ò¤Ê·ÁPDF¤ò¼è¤ê¹þ¤ß¤Þ¤¹¡£(¡ö3)¤ÎÉôʬ¡¢¤ª¤è¤Ó¥×¥í¥°¥é¥àËöÈø¤ÎdrawGrid´Ø¿ô¤Ç10pt¤´¤È¤Ë¥°¥ê¥Ã¥ÉÀþ¤òÉÁ²è¤·¤Þ¤¹¡£
¤½¤·¤Æ¡¢(¡ö4)¤ÎÉôʬ¤Ç¤ÏTTF¥Õ¥©¥ó¥È¤ò¼è¤ê¹þ¤ß¡Öipaexg¡×¤È¤¤¤¦Ì¾Á°¤ÇÍøÍѤǤ¤ë¤è¤¦¤Ë»ØÄꤷ¤Þ¤¹¡£(¡ö5)°Ê¹ß¤ÎÉôʬ¤Ç°¸Ì¾¤äÆüÉÕ¡¢¶â³Û¤ò½ñ¤¹þ¤ß¤Þ¤¹¡£ºÇ¸å(¡ö6)¤ÇPDF¤ò½ñ¤½Ð¤·¤Þ¤¹¡£
¡û¥°¥ê¥Ã¥ÉÀþ¤ò¾Ã¤·¤Æ´°À®
¤³¤Î¤è¤¦¤Ë¤·¤Æ¡¢¥Æ¥¥¹¥È¤Î°ÌÃÖ¤òÄ´À°¤·¤¿¤é¡¢¥×¥í¥°¥é¥à¤Î(¡ö3)¤Ëµ½Ò¤·¤¿drawGrid´Ø¿ô¤Î¸Æ½Ð¤ò¾Ã¤·¤Þ¤¹¡£
¤¢¤È¤Ï¡¢CSV¥Õ¥¡¥¤¥ë¤Ê¤É¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤ó¤ÇPDF¤òÀ¸À®¤¹¤ë¤è¤¦¤Ê½èÍý¤ò½ñ¤²Ã¤¨¤ì¤Ð¡¢Î©ÇɤÊÎμý½ñÀ¸À®¥Ä¡¼¥ë¤Î´°À®¤¹¤ë¤Ç¤·¤ç¤¦¡£
¡û¤Þ¤È¤á
°Ê¾å¡¢Á°²ó¤Èº£²ó¤ÇPDF¤ò°·¤¦¥×¥í¥°¥é¥à¤òºî¤Ã¤Æ¤ß¤Þ¤·¤¿¡£¤³¤³¤Ç¸«¤¿¤È¤ª¤êgopdf¤ÏɬÍפʵ¡Ç½¤òÌÖÍ夷¤Æ¤¤¤Ê¤¬¤é¤â¡¢¥·¥ó¥×¥ë¤Ç»È¤¤¾¡¼ê¤¬Îɤ¤¤È´¶¤¸¤Þ¤·¤¿¡£
Go¸À¸ì¤Çºî¤Ã¤Æ¤ª¤±¤ÐÇÛÉÛ¤â´Êñ¤Ê¤Î¤¬Îɤ¤ÅÀ¤Ç¤¹¡£¤Ê¤ªGo¸À¸ì1.16¤Ç¤ÏÇÛÉÛ¤¹¤ë¥Ð¥¤¥Ê¥ê¤Ë¥×¥í¥°¥é¥à¤ÇÍøÍѤ¹¤ë¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤âźÉդǤ¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¤³¤Î»ÅÁȤߤò»È¤¨¤Ð¥Õ¥©¥ó¥È¥Õ¥¡¥¤¥ë¤ä¤Ò¤Ê·Á¥Õ¥¡¥¤¥ë¤â¼Â¹Ô¥Õ¥¡¥¤¥ë¤Ë´Þ¤á¤é¤ì¤Þ¤¹¡£ÇÛÉÛ¤¬¤è¤êÊØÍø¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£
¼«Í³·¿¥×¥í¥°¥é¥Þ¡¼¡£¤¯¤¸¤é¤Ï¤ó¤É¤Ë¤Æ¡¢¥×¥í¥°¥é¥ß¥ó¥°¤Î³Ú¤·¤µ¤òÅÁ¤¨¤ë³èÆ°¤ò¤·¤Æ¤¤¤ë¡£Âåɽºî¤Ë¡¢ÆüËܸì¥×¥í¥°¥é¥ß¥ó¥°¸À¸ì¡Ö¤Ê¤Ç¤·¤³¡× ¡¢¥Æ¥¥¹¥È²»³Ú¡Ö¥µ¥¯¥é¡×¤Ê¤É¡£2001ǯ¥ª¥ó¥é¥¤¥ó¥½¥Õ¥ÈÂç¾ÞÆþ¾Þ¡¢2004ǯÅṲ̀Ƨ¥æ¡¼¥¹ ¥¹¡¼¥Ñ¡¼¥¯¥ê¥¨¡¼¥¿Ç§Äê¡¢2010ǯ OSS¹×¸¥¼Ô¾Ï¼õ¾Þ¡£µ»½Ñ½ñ¤â¿¤¯¼¹É®¤·¤Æ¤¤¤ë¡£Ä¾¶á¤Ç¤Ï¡¢¡Ö¥·¥´¥È¤¬¤Ï¤«¤É¤ë Python¼«Æ°½èÍý¤Î¶µ²Ê½ñ(¥Þ¥¤¥Ê¥Ó½ÐÈÇ)¡×¡Ö¤¹¤°¤Ë»È¤¨¤ë!¶È̳¤Ç¼ÂÁ©¤Ç¤¤ë! Python¤Ë¤è¤ëAI¡¦µ¡³£³Ø½¬¡¦¿¼Áسؽ¬¥¢¥×¥ê¤Î¤Ä¤¯¤êÊý TensorFlow2Âбþ(¥½¥·¥à)¡×¡Ö¥Þ¥ó¥¬¤Ç¤¶¤Ã¤¯¤ê³Ø¤ÖPython(¥Þ¥¤¥Ê¥Ó½ÐÈÇ)¡×¤Ê¤É¡£