小编Ant*_*ony的帖子

如何使用POI读取word文档中每个单词的字体大小?

我试图找出word文档中是否存在字体为2的任何内容.但是,我无法做到这一点.首先,我试图读取样本word文档中每个单词的字体,该单词只有一行和7个单词.我没有得到正确的结果.

这是我的代码:

HWPFDocument doc = new HWPFDocument (fileStream);
WordExtractor we = new WordExtractor(doc);
Range range = doc.getRange()
String[] paragraphs = we.getParagraphText();
for (int i = 0; i < paragraphs.length; i++) {
  Paragraph pr = range.getParagraph(i);
  int k = 0
  while (true) {
     CharacterRun run = pr.getCharacterRun(k++);
     System.out.println("Color: " + run.getColor());
     System.out.println("Font: " + run.getFontName());
     System.out.println("Font Size: " + run.getFontSize());
     if (run.getEndOffSet() == pr.getEndOffSet())
       break;
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,上面的代码总是使字体大小加倍.即,如果文档中的实际字体大小为12,则输出24,如果实际字体为8,则输出16.

这是从word文档读取字体大小的正确方法吗?

java ms-word word-processor apache-poi

6
推荐指数
1
解决办法
2575
查看次数

如何提取图像中的白色区域

我有这样的示例图像

在此输入图像描述

我正在寻找一种方法来消除图像中的噪音,这样我最终得到的图像在白色背景上只有黑色文字,这样我就可以将它发送到tesseract.

我试过变形了

kernel = np.ones((4,4),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.imshow("opening", opening)
Run Code Online (Sandbox Code Playgroud)

但它似乎没有用.

我也试图找到轮廓

img = cv2.cvtColor(rotated, cv2.COLOR_BGR2GRAY)
(cnts, _) = cv2.findContours(img, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:1]
for c in cnts:
    x,y,w,h = cv2.boundingRect(c)
    roi=rotated[y:y+h,x:x+w].copy()
    cv2.imwrite("roi.png", roi)
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,我得到以下轮廓:

在此输入图像描述

裁剪时会导致此图像:

在此输入图像描述

这还不够好.我想要在白色背景上的黑色文字,以便我可以将它发送到tesseract OCR并具有良好的成功率.

还有什么我可以尝试的吗?

更新

这是一个额外的类似图像.这个有点容易,因为它有一个光滑的矩形

在此输入图像描述

python opencv image-processing computer-vision

6
推荐指数
1
解决办法
4001
查看次数

RVM不是一个函数,用'rvm use ...'选择rubies将无法使用jenkinsfile

我试图在我的Jenkins文件中通过RVM使用ruby版本,如下所示:

sh 'rvm use ruby 2.3.1'
Run Code Online (Sandbox Code Playgroud)

但是,我相信上面的命令没有按预期执行,因为我收到此消息后

+ rvm use ruby 2.3.1
 RVM is not a function, selecting rubies with 'rvm use ...' will not work.
Run Code Online (Sandbox Code Playgroud)

我读了其他答案,建议添加#!/bin/bash -xl,但是,我使用的是Jenkinsfile而不是bash脚本.

有办法解决这个问题吗?我只想将ruby设置为2.3.1然后运行一个命令.

我也试过使用create default但仍然打印的ruby版本是2.0.0

  sh '''
    #!/bin/bash -xl
    echo $PATH
    rvm install ruby-2.3.1
    rvm alias create default 2.3.1 && ruby --version
    ruby --version
  '''
Run Code Online (Sandbox Code Playgroud)

rvm jenkins jenkins-pipeline

6
推荐指数
1
解决办法
1904
查看次数

如何从列表中获取特定项目?

我有一个案例类列表.我想从列表中获取特定项目.

我做

myList.filter(_.id == myobject.id)(0)
Run Code Online (Sandbox Code Playgroud)

filter实际返回某些东西时,这将起作用.但是当过滤器没有返回任何内容时,我得到索引超出绑定的异常.

scala> case class Color (id: Int, name: String)
defined class Color
scala> val myList1 = List[Color](Color(1, "red"), Color(2, "green"), Color(3, "blue"))
myList1: List[Color] = List(Color(1,red), Color(2,green), Color(3,blue))
scala> val toFind1 = Color(10, "white")
toFind1: Color = Color(10,white)
scala> myList1.filter(_.id == toFind1.id)(0)
java.lang.IndexOutOfBoundsException: 0
Run Code Online (Sandbox Code Playgroud)

scala

6
推荐指数
1
解决办法
59
查看次数

如何在data-sly-list中添加条件元素?

我目前有一个填充 JS 数组的数据列表,如下所示:

          var infoWindowContent = [
              <div data-sly-use.ed="Foo"
                   data-sly-list="${ed.allassets}"
                   data-sly-unwrap>
                   ['<div class="info_content">' +
                   '<h3>${item.assettitle @ context='unsafe'}</h3> ' +
                   '<p>${item.assettext @ context='unsafe'} </p>' + '</div>'],
               </div>
               ];
Run Code Online (Sandbox Code Playgroud)

我需要在这个数组中添加一些逻辑。如果assetFormat属性是“text/html”,那么我想打印<p>标签。如果assetFormat属性是image/png那么我想打印img标签。

我的目标是这样的。这有可能实现吗?

          var infoWindowContent = [
              <div data-sly-use.ed="Foo"
                   data-sly-list="${ed.allassets}"
                   data-sly-unwrap>
                   ['<div class="info_content">' +
                   '<h3>${item.assettitle @ context='unsafe'}</h3> ' +
                   if (assetFormat == "image/png")
                       '<img src="${item.assetImgLink}</img>'
                   else if (assetFormat == "text/html")
                       '<p>${item.assettext @ context='unsafe'}</p>'
                   + '</div>'],
               </div>
               ];
Run Code Online (Sandbox Code Playgroud)

aem sightly

5
推荐指数
2
解决办法
8606
查看次数

如何在自定义 django 命令中抽象出命令代码

我正在我的应用程序management/commands目录下编写自定义 django 命令。目前我在该目录中有 6 个不同的文件。每个文件都有一个不同的命令来解决一个独特的需求。但是,有一些实用程序对所有这些实用程序都是通用的。抽象出这个通用代码的最佳方法是什么?

下面是一个例子:

load_colors

class Command(BaseCommand):
   def handle(self, *args, **options)
      ....code unique to colors
   def check_validity(self, color)
      ....#code common to both shades and colors
Run Code Online (Sandbox Code Playgroud)

load_shades

 class Command(BaseCommand):
   def handle(self, *args, **options)
      ....#code unique to shades
   def check_validity(self, color)
      ....#code common to both shades and colors
Run Code Online (Sandbox Code Playgroud)

python django

5
推荐指数
1
解决办法
973
查看次数

组合图像中的重叠组

我使用opencv_contrib来检测图像中的文本区域.

这是原始图像

这是找到文本区域后的图像:

可以看出,图像中存在重叠的组.例如,似乎是围绕两个组Hello World和两个绕Some more sample text

问题 在这样的场景中,如何通过合并两个框来保持最宽的框.对于这些例子,它将以一个开始H和结束的方式d覆盖Hello World.我这样做的原因是我想裁剪这部分图像并将其发送给tesseract.

这是绘制框的相关代码.

void groups_draw(Mat &src, vector<Rect> &groups)
{
    for (int i=(int)groups.size()-1; i>=0; i--)
    {
        if (src.type() == CV_8UC3)
            rectangle(src,groups.at(i).tl(),groups.at(i).br(),Scalar( 0, 255, 255 ), 2, 8 );
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的.我的想法在评论中.

void groups_draw(Mat &src, vector<Rect> &groups)
{
    int previous_tl_x = 0;
    int previous_tl_y = 0;
    int prevoius_br_x = 0;
    int previous_br_y = 0;
    //sort the groups from lowest to largest.
    for …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing computer-vision

5
推荐指数
1
解决办法
210
查看次数

如何从 S3Object 获取输出流?

我的目标是从 S3 获取一个对象(图像),更改文件的元数据,并将其替换为已更改元数据的新文件。

为了更改元数据,我使用的是commons 图像库。我对下面的示例进行了编码,该示例按预期工作,但不处理 S3。

File newFile = new File("newImage2.jpg");
OutputStream os = new BufferedOutputStream(new FileOutputStream(newFile))
InputStream isNew = new BufferedInputStream(new FileInputStream(newFile))
InputStream is = new BufferedInputStream(new FileInputStream(new File("newImage.jpg")))
try {
            String xmpXml = "<x:xmpmeta>" +
            "\n<Lifeshare>" +
            "\n\t<Date>"+"some date"+"</Date>" +
            "\n\t<Latitude>"+"somelat"+"</Latitude>" +
            "\n\t<Longitude>"+"somelong"+"</Longitude>" +
            "\n\t<Altitude>"+"somealt"+"</Altitude>" +
            "\n\t<Z>"+"someZ"+"</Z>" +
            "\n\t<X>"+"someX"+"</X>" +
            "\n\t<Y>"+"Some y"+"</Y>" +
            "\n</Lifeshare>" +
            "\n</x:xmpmeta>";
            JpegXmpRewriter rewriter = new JpegXmpRewriter();
            rewriter.updateXmpXml(is,os, xmpXml);
            String newXmpXml = Imaging.getXmpXml(isNew, "newImage2.jpg");
            println newXmpXml
        }
finally {
   is.close()
   os.close()
} …
Run Code Online (Sandbox Code Playgroud)

java image-processing amazon-s3 aws-java-sdk apache-commons-imaging

5
推荐指数
1
解决办法
4855
查看次数

有没有办法从boto3获取access_key和secret_key?

当我启动具有IAM角色的EC2实例时,我可以boto3在该EC2实例上使用,而不必指定aws访问和密钥,因为boto3 它们会自动读取它们.

>>> import boto3
>>> s3 = boto3.resource("s3")
>>> list(s3.buckets.all())[0]
s3.Bucket(name='my-bucket-name')
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何方法可以从boto3获取访问密钥和密钥?例如,如何使用打印到标准控制台print

python amazon-web-services boto3

5
推荐指数
1
解决办法
5783
查看次数

如何替换python字符串中的占位符

如果我在 Python 中有这样的字符串,我该如何填充占位符?

s = """
uri1: %s/file1.txt
md5: %s
uri2: %s/file2.txt
md5: %s
uri3: %s/file3.txt
md5: %s
"""
Run Code Online (Sandbox Code Playgroud)

uri将保持不变,但md5会改变。因此,对于上述情况,最终输出将是这样的:

uri1: file:///somepath/foo/file1.txt
md5: 1234
uri2: file:///somepath/foo/file2.txt
md5: 4321
uri3: file:///somepath/foo/file3.txt
md5: 9876
Run Code Online (Sandbox Code Playgroud)

我知道我可以填写每个%s但如果我不想每次都复制相同的变量怎么办?即我想避免这样做:

s = """
uri1: %s/file1.txt
md5: %s
uri2: %s/file2.txt
md5: %s
uri3: %s/file3.txt
md5: %s
""" % (self.URI, self.md5_for_1, self.URI, self.md5_for_2, self.URI, self.md5_for_3)
Run Code Online (Sandbox Code Playgroud)

在上面,我self.URI每次都必须指定......我想知道是否有一种方法可以只指定一次?

python string

5
推荐指数
1
解决办法
6151
查看次数