将处理草图导出为 PDF 的问题:草图被裁剪

Issues exporting Processing sketch to PDF: sketch gets cropped

我正在尝试将草图导出为 pdf。我遇到的问题是,出于某种原因,我的草图只有一部分被导出为 pdf,就好像原始草图被裁剪了一样!当我 运行 我的草图时,会显示 64 条线(如预期的那样),实际上当我将它保存到 png 时,所有 64 条线都在那里并且草图看起来与我 运行 时一样。

当我将草图导出为 pdf 时,只显示 16 行,就好像 pdf 是裁剪我的草图,只有裁剪的部分被导出。

这是显示草图应该是什么样子的 png:

这是 pdf 导出的内容:

这是我的代码:

import processing.pdf.*;
import java.util.Random;


int cols, rows;
int videoScale = 100;
boolean recordPDF = false;


void setup() {
  size(800,800);
  pixelDensity(2);
  frameRate(0.5);

  cols = width/videoScale;
  rows = height/videoScale;

}

void draw() {
  if (recordPDF) {
      beginRecord(PDF, "pdfs/" + str(random(1000)) + ".pdf");
  }

  background(255);
  strokeWeight(1.5);
  drawLines(); 

  if (recordPDF) {
      endRecord();
      recordPDF = false;
      println("Printed pdf.");
  }
}

void keyPressed() {
    if (key == 'p') {
        recordPDF = true;
    }
    if (key == 's') {
        saveFrame("img.png");
    }
}


void drawLines() {
    // Begin loop for columns
    for (int i = 0; i < cols; i++) {
    // Begin loop for rows
        for (int j = 0; j < rows; j++) {
            int x = i*videoScale;
            int y = j*videoScale;
            line(x,y,x+30,y+30);
        }
    }
}

我查看了有关 PDF 导出的相关文档,但找不到解决方案。任何帮助将不胜感激!

从 setup() 中删除 pixelDensity(2) 以修复。 PixelDensity 为 2 旨在允许视网膜监视器使用所有像素。如果您必须使用它,那么您需要为 pdf 文件编写一个单独的 drawLines()(示例如下)。请注意,对于 pdf drawLines(),videoScale 被减半,每条线的第二组 x、y 坐标为 +15 而不是 +30。您还必须更改保存的每个文件的路径以使其适合您的系统。我使用不同的方法从 pGraphics 创建 pdf,这应该是无关紧要的。

/*
 If pixelDensity(2) is used, need to modify second drawLines() for pdf.
 Change file paths to suit your system.
*/

import processing.pdf.*;
import java.util.Random;

int cols, rows;
int videoScale = 100;

void drawLines() {
  for (int i = 0; i < cols; i++) {
    for (int j = 0; j < rows; j++) {
      int x = i*videoScale;
      int y = j*videoScale;
      strokeWeight(1.5);
      line(x, y, x+30, y+30);
    }
  }
}

void setup() {
  size(800, 800);
  background(255);
  pixelDensity(2);
  // frameRate(0.5);
  cols = width/videoScale;
  rows = height/videoScale;   
  drawLines();
}

void draw() {
}

void keyPressed() {
  if (key == 'p') {
    PGraphics pdf = createGraphics(width, height, PDF, "/Users/me/Desktop/output.pdf"); // change this
    videoScale = 50;  // cut in half
    pdf.beginDraw();  
    for (int i = 0; i < cols; i++) {
      for (int j = 0; j < rows; j++) {
        int x = i*videoScale;
        int y = j*videoScale;
        pdf.line(x, y, x+15, y+15); // +15 instead of +30 for second x,y coordinates
      }
    }
    pdf.dispose();
    pdf.endDraw();
    println("Printed pdf.");
  }
  if (key == 's') {
    saveFrame("/Users/me/Desktop/img.png"); // change this
    println("Image saved.");
  }
}