Unity에서 iTextSharp로 PDF 만들기
iTextSharp 다운로드
iTextSharp는 AGPL-3.0License의 소스로 C#용 PDF로 생성된 라이브러리를 무료로 사용할 수 있다.Unity 5.6.4(Mac Edition)로 시험해 봤는데, 이것은 문제없이 사용할 수 있을 것 같다.
다음 NuGet 페이지에서 Manual download 링크를 클릭하십시오.nupkg 파일을 다운로드합니다.
iTextSharp
itextsharp.xmlworker
itextsharp.pdfa
itextsharp.xtra
다운로드 받았어요.nupkg의 확장자를 입력하십시오.zip으로 변경하여 해동하고 각자의 포장에서 dll를 꺼냅니다.
Unity 가져오기
Plugins 폴더를 만들고 꺼낸 4개의 dll(itextsharp.dll,itextsharp.pdfa.dll,itextsharp.xml worker.dll,itextsharp.xtra.dll)을 넣으세요.
PDF에 캡처 저장하기
PDFTest.csusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using System;
public class PDFTest : MonoBehaviour {
public Camera mainCam;
private Texture2D capturedTex;
public void Start(){
GeneratePDF();
}
public void GeneratePDF () {
string path = Application.persistentDataPath + "/screenshot-"+System.DateTime.Now.ToString("yyy-MM-dd_HH-mm-ss")+".pdf";
StartCoroutine(CreatePDF(path));
}
// create pdf to specific path
public IEnumerator CreatePDF (string path) {
Document doc = new Document(PageSize.A4.Rotate());
var writer = PdfWriter.GetInstance(doc, new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None));
doc.Open();
doc.NewPage();
yield return StartCoroutine(TakeScreenshot(mainCam, Screen.width, Screen.height));
AddImageToPDF(writer, capturedTex, 0, 0);
doc.Close();
}
// coroutine to take screenshot
public IEnumerator TakeScreenshot (Camera cam, int width, int height) {
RenderTexture rt = new RenderTexture(width, height, 24, RenderTextureFormat.ARGB32);
rt.antiAliasing = 8;
cam.targetTexture = rt;
cam.Render();
yield return new WaitForEndOfFrame();
RenderTexture.active = rt;
capturedTex = new Texture2D(width, height, TextureFormat.RGB24, false);
capturedTex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
capturedTex.Apply();
cam.targetTexture = null;
}
// add image to pdf
public void AddImageToPDF(PdfWriter pdfWriter, Texture2D img, float posX, float posY){
byte[] imageBytes = img.EncodeToPNG();
iTextSharp.text.Image finalImage = iTextSharp.text.Image.GetInstance(imageBytes);
finalImage.ScaleAbsolute(PageSize.A4.Rotate());
finalImage.SetAbsolutePosition(posX, posY);
var pdfContentByte = pdfWriter.DirectContent;
pdfContentByte.AddImage(finalImage);
}
}
PDF가 perrsistentDataPath 아래에 이렇게 저장됩니다.
총결산
게임에서 PDF의 시작은 별로 안 할 수도 있지만 유닛을 게임 이외의 목적으로 사용하는 사람들에게는 편리한 프로그램 라이브러리라고 생각합니다.
Reference
이 문제에 관하여(Unity에서 iTextSharp로 PDF 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jhorikawa_err/items/c50eb9d334f6f4252faf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Plugins 폴더를 만들고 꺼낸 4개의 dll(itextsharp.dll,itextsharp.pdfa.dll,itextsharp.xml worker.dll,itextsharp.xtra.dll)을 넣으세요.
PDF에 캡처 저장하기
PDFTest.csusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using System;
public class PDFTest : MonoBehaviour {
public Camera mainCam;
private Texture2D capturedTex;
public void Start(){
GeneratePDF();
}
public void GeneratePDF () {
string path = Application.persistentDataPath + "/screenshot-"+System.DateTime.Now.ToString("yyy-MM-dd_HH-mm-ss")+".pdf";
StartCoroutine(CreatePDF(path));
}
// create pdf to specific path
public IEnumerator CreatePDF (string path) {
Document doc = new Document(PageSize.A4.Rotate());
var writer = PdfWriter.GetInstance(doc, new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None));
doc.Open();
doc.NewPage();
yield return StartCoroutine(TakeScreenshot(mainCam, Screen.width, Screen.height));
AddImageToPDF(writer, capturedTex, 0, 0);
doc.Close();
}
// coroutine to take screenshot
public IEnumerator TakeScreenshot (Camera cam, int width, int height) {
RenderTexture rt = new RenderTexture(width, height, 24, RenderTextureFormat.ARGB32);
rt.antiAliasing = 8;
cam.targetTexture = rt;
cam.Render();
yield return new WaitForEndOfFrame();
RenderTexture.active = rt;
capturedTex = new Texture2D(width, height, TextureFormat.RGB24, false);
capturedTex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
capturedTex.Apply();
cam.targetTexture = null;
}
// add image to pdf
public void AddImageToPDF(PdfWriter pdfWriter, Texture2D img, float posX, float posY){
byte[] imageBytes = img.EncodeToPNG();
iTextSharp.text.Image finalImage = iTextSharp.text.Image.GetInstance(imageBytes);
finalImage.ScaleAbsolute(PageSize.A4.Rotate());
finalImage.SetAbsolutePosition(posX, posY);
var pdfContentByte = pdfWriter.DirectContent;
pdfContentByte.AddImage(finalImage);
}
}
PDF가 perrsistentDataPath 아래에 이렇게 저장됩니다.
총결산
게임에서 PDF의 시작은 별로 안 할 수도 있지만 유닛을 게임 이외의 목적으로 사용하는 사람들에게는 편리한 프로그램 라이브러리라고 생각합니다.
Reference
이 문제에 관하여(Unity에서 iTextSharp로 PDF 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jhorikawa_err/items/c50eb9d334f6f4252faf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using System;
public class PDFTest : MonoBehaviour {
public Camera mainCam;
private Texture2D capturedTex;
public void Start(){
GeneratePDF();
}
public void GeneratePDF () {
string path = Application.persistentDataPath + "/screenshot-"+System.DateTime.Now.ToString("yyy-MM-dd_HH-mm-ss")+".pdf";
StartCoroutine(CreatePDF(path));
}
// create pdf to specific path
public IEnumerator CreatePDF (string path) {
Document doc = new Document(PageSize.A4.Rotate());
var writer = PdfWriter.GetInstance(doc, new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None));
doc.Open();
doc.NewPage();
yield return StartCoroutine(TakeScreenshot(mainCam, Screen.width, Screen.height));
AddImageToPDF(writer, capturedTex, 0, 0);
doc.Close();
}
// coroutine to take screenshot
public IEnumerator TakeScreenshot (Camera cam, int width, int height) {
RenderTexture rt = new RenderTexture(width, height, 24, RenderTextureFormat.ARGB32);
rt.antiAliasing = 8;
cam.targetTexture = rt;
cam.Render();
yield return new WaitForEndOfFrame();
RenderTexture.active = rt;
capturedTex = new Texture2D(width, height, TextureFormat.RGB24, false);
capturedTex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
capturedTex.Apply();
cam.targetTexture = null;
}
// add image to pdf
public void AddImageToPDF(PdfWriter pdfWriter, Texture2D img, float posX, float posY){
byte[] imageBytes = img.EncodeToPNG();
iTextSharp.text.Image finalImage = iTextSharp.text.Image.GetInstance(imageBytes);
finalImage.ScaleAbsolute(PageSize.A4.Rotate());
finalImage.SetAbsolutePosition(posX, posY);
var pdfContentByte = pdfWriter.DirectContent;
pdfContentByte.AddImage(finalImage);
}
}
게임에서 PDF의 시작은 별로 안 할 수도 있지만 유닛을 게임 이외의 목적으로 사용하는 사람들에게는 편리한 프로그램 라이브러리라고 생각합니다.
Reference
이 문제에 관하여(Unity에서 iTextSharp로 PDF 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jhorikawa_err/items/c50eb9d334f6f4252faf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)